7Java第七单元练习题-Java多线程机制

合集下载

Java多线程习题

Java多线程习题
C、Java.1ang.ThreadD、java.1ang.Runnable
9、下列说法中错误的一项是( )。
A、Applet必须全部重写其生命周期方法
B、Applet不必全部重写其生命周期方法
C、Applet中使用了线程,则需要重写相应的生命周期方法
D、stop()总是在destroy()之前被调用。
B、用于建立与某个数据源的连接可采用DriverManager类的getConnection方法
C、建立数据库连接时,必须要进行异常处理
D JDBC中查询语句的执行方法必须采用Statement类实现
12、运行下列程序,会产生什么结果()
public class X extends Thread implements Runable{ public void run(){
18•实现线程体的方式除了继承Thread类,还可以实现接口。
E)A、Cloneable B、Runnable C、Iterable D、Serializable二、填空题
1、 若在高优先级线程的run()方法中调用_____方法,则该线程将让出CPU使其他 —
的线程获得CPU的使用权。
2、 通过实现Runnable接口创建线程的过程是:将实现Runnable的一个亠作为
Java
知识点:
Java的多线程,实现多线程的两种方法,线程控制、调度方法
一、选择题
1、什么原因可导致线程停止执行。 ( )
A.线程调用了wait()方法;
B.线程调用了yield()方法;
C.线程调用了pause()方法;
D.线程调用了sleep()方法。
2、 哪个方法是实现Runnable接口所需的?
13、下面哪个方法可以在任何时候被任何线程调用? ()

JAVA多线程期末考试题库单选题100道及答案解析

JAVA多线程期末考试题库单选题100道及答案解析

JAVA多线程期末考试题库单选题100道及答案解析1. 在Java 中,实现多线程有几种方式?()A. 2 种B. 3 种C. 4 种D. 5 种答案:B解析:实现多线程有三种方式:继承Thread 类、实现Runnable 接口、使用线程池的Callable 和Future 。

2. 以下哪个方法用于启动一个线程?()A. start()B. run()C. begin()D. execute()答案:A解析:调用线程对象的start() 方法启动线程,会自动调用run() 方法执行线程任务。

3. 以下关于线程和进程的说法,错误的是()A. 一个进程可以包含多个线程B. 线程是进程的执行单元C. 进程之间不能共享内存D. 线程之间可以独立运行答案:D解析:线程之间共享进程的内存空间,不是独立运行的。

4. 以下哪个方法可以让当前线程暂停一段时间?()A. sleep()B. wait()C. notify()D. yield()答案:A解析:Thread.sleep() 方法可以让当前线程暂停指定的时间。

5. 以下哪个方法用于线程间的等待/通知机制?()A. sleep() 和notify()B. wait() 和notify()C. yield() 和notifyAll()D. suspend() 和resume()答案:B解析:wait() 使当前线程等待,notify() 唤醒一个等待的线程,notifyAll() 唤醒所有等待的线程。

6. 以下关于线程同步的说法,错误的是()A. 可以使用synchronized 关键字实现线程同步B. 同步会降低程序的并发性C. 同步可以保证线程安全D. 所有方法都应该同步答案:D解析:不是所有方法都需要同步,只有在多个线程可能同时访问和修改共享资源时才需要同步。

7. 以下哪个不是线程的状态?()A. 就绪B. 运行C. 阻塞D. 结束E. 暂停答案:E解析:线程的状态包括就绪、运行、阻塞和结束。

java多线程复习题

java多线程复习题

java多线程复习题Java多线程复习题Java多线程是Java编程中的一个重要概念和特性。

它允许程序同时执行多个任务,提高了程序的效率和响应性。

为了更好地理解和掌握Java多线程,下面将给出一些复习题,帮助读者巩固相关知识。

1. 什么是线程?线程是程序执行的最小单位,它是进程中的一个实体。

一个进程可以包含多个线程,每个线程都有自己的执行路径。

2. 如何创建线程?在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。

继承Thread类需要重写run()方法,实现Runnable接口需要实现run()方法。

3. 线程的生命周期有哪些状态?线程的生命周期包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。

新建状态是指线程被创建但还未启动;就绪状态是指线程可以运行,但还未获得CPU的执行权;运行状态是指线程正在执行;阻塞状态是指线程暂时停止执行,等待某个条件满足;死亡状态是指线程执行完毕或被中断。

4. 如何启动线程?创建线程对象后,可以通过调用start()方法来启动线程。

start()方法会在新的线程中调用run()方法。

5. 如何实现线程的同步?Java提供了多种机制来实现线程的同步,如synchronized关键字、Lock接口和Condition接口等。

synchronized关键字可以修饰方法或代码块,使得只有一个线程可以访问被修饰的方法或代码块。

Lock接口提供了更灵活的锁机制,可以实现更细粒度的同步控制。

6. 什么是线程安全?线程安全是指多个线程同时访问某个资源时,不会导致该资源的数据不一致或出现其他问题。

可以通过同步机制来保证线程安全。

7. 什么是线程池?线程池是一种管理和复用线程的机制。

通过线程池,可以避免频繁地创建和销毁线程,提高了程序的性能和效率。

8. 如何创建线程池?可以使用ThreadPoolExecutor类来创建线程池。

通过调用其构造方法,可以指定线程池的核心线程数、最大线程数、线程空闲时间等参数。

java多线程实例练习题答案

java多线程实例练习题答案

java多线程实例练习题答案篇一:java线程练习及答案一、单选题(共有题目15题,共计30.0分)第三次练习题1Java语言的类间的继承关系是(B)A.多重的B.单重的C线程的D.不能继承2.下列选项中,用于在定义子类时声明父类名的关键字是(C)A.interfaceB.packageC.e某tendD.cla3.关于Java中异常的叙述正确的是(D)A.异常是程序编写过程中代码的语法错误B.异常是程序编写过程中代码的逻辑错误C.异常出现后程序的运行马上中止D.异常是可以捕获和处理的4.下面语句中哪一个不是用于异常处理的语句(B)。

A.tryB.breakC.catchD.finally5.下面是关于类及其修饰符的一些描述,不正确的是(D)。

A.abtract类只能用来派生子类,不能用来创建abtract类的对象B.final类不但可以用来派生子类,也可以用来创建final类的对象C.abtract不能与final同时修饰一个类D.abtract方法必须在abtract类中声明,但abtract类定义中可以没有abtract方法6.下面关于继承的哪个叙述是正确的。

(D)A.在java中允许多继承B.在java中一个类只能实现一个接口C.在java中一个类不能同时继承一个类和实现一个接口D.java的单一继承使代码更可靠7.在异常处理的语句中哪一个可以出现多次(C)。

A.tryB.breakC.catchD.finally8.在类的定义中构造函数的作用是(B)A.保护成员变量B.初始化成员变量C.描述类的特征D.读取类的成员变量9.下列选项中,用于在定义子类时声明父类名的关键字是(C)。

A.interfaceB.packageC.e某tendD.cla10.给出一段程序,试判断哪个是正确的结果。

(B)publicclaTet{publictaticvoidmain(Stringarg[]){try{Sytem.out.print(“Helloworld”);}finally{Sytem.out.println(“Finallye某ecuting”);}}}A.无法编译运行,因为没有指定异常B.无法编译运行,因为没有catch子句C.HelloworldD.HelloworldFinallye某ecuting11.给出下面的类定义:claA{publicint某;privateinty;claB{protectedvoidmethod1(){}claC{privatevoidmethod2(){}}}}claDe某tendA{publicfloatz;}方法method2()不能直接访问的是:(D)A类A中的变量某B.类A中的变量yC.类B中的method1()D.类D中的变量z12.以下关于异常捕获的原则中,错误的是(D)B.先列出子类,后列出父类。

java多线程练习题(打印版)

java多线程练习题(打印版)

java多线程练习题(打印版)### Java多线程练习题#### 题目一:实现一个简单的线程编写一个Java程序,创建一个线程,该线程打印出从1到10的数字。

```javapublic class SimpleThread extends Thread {public void run() {for (int i = 1; i <= 10; i++) {System.out.println(i);}}public static void main(String[] args) {SimpleThread thread = new SimpleThread();thread.start();}}```#### 题目二:线程同步编写一个Java程序,创建两个线程,它们交替打印字符串"A"和"B",直到每个线程打印5次。

```javapublic class ThreadSync {private static final Object lock = new Object();public static void main(String[] args) {Thread threadA = new Thread(() -> {for (int i = 0; i < 5; i++) {synchronized (lock) {System.out.print("A");lock.notify();try {lock.wait();} catch (InterruptedException e) { e.printStackTrace();}}}});Thread threadB = new Thread(() -> {for (int i = 0; i < 5; i++) {synchronized (lock) {System.out.print("B");lock.notify();try {lock.wait();} catch (InterruptedException e) { e.printStackTrace();}}}});threadA.start();threadB.start();}}```#### 题目三:生产者-消费者问题编写一个Java程序,模拟生产者-消费者问题。

Java 多线程编程练习题及答案

Java 多线程编程练习题及答案

Java 多线程编程练习题及答案一、多线程基础概念在开始进行Java多线程编程练习之前,首先需要了解一些多线程的基础概念。

1. 什么是线程?线程是计算机进程中的一个执行序列,可以独立运行,并与其他线程并发执行。

一个线程可以执行一个任务,它拥有自己的栈、程序计数器和本地变量等。

2. 为什么要使用多线程?多线程可以提高程序的执行效率,特别是在处理多任务时。

通过将多个任务拆分成多个线程,可以同时执行这些任务,从而加快整体的执行速度。

3. 如何创建线程?在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。

通过继承Thread类,需要重写run方法来定义线程的执行逻辑;通过实现Runnable接口,则需要实现run方法,并将Runnable对象传递给Thread类进行线程的创建。

二、多线程编程练习题现在,我们来进行一些多线程编程练习题,以巩固对多线程概念和编程的理解。

1. 编写一个程序,创建两个线程并使它们交替输出1-100的数字。

提示:可以使用一个标志变量来判断当前是哪个线程在执行,并使用synchronized关键字来保证线程之间的同步。

2. 编写一个程序,创建三个线程A、B和C,使它们运行10次,每次分别输出A、B和C,并等待随机时间后继续执行下一次。

提示:可以使用Thread.sleep()方法来模拟线程等待的时间。

3. 编写一个程序,模拟银行存取款操作。

创建两个线程,一个线程负责存款,另一个线程负责取款。

初始银行账户余额为1000元,存款线程每次存100元,取款线程每次取200元,两个线程分别执行10次。

提示:可以使用wait()和notify()方法来实现线程之间的等待和唤醒操作。

三、多线程编程练习答案下面是上述多线程编程练习题的答案,供参考。

1.```public class AlternatePrinting implements Runnable {private static int count = 1;private static final Object lock = new Object();private final int threadId;private final int totalThreads;private final int maxCount;public AlternatePrinting(int threadId, int totalThreads, int maxCount) {this.threadId = threadId;this.totalThreads = totalThreads;this.maxCount = maxCount;}@Overridepublic void run() {while (true) {synchronized (lock) {if (count > maxCount) {break;}if (count % totalThreads == threadId - 1) {System.out.println("Thread " + threadId + ": " + count);count++;} else {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}lock.notifyAll();}}}public static void main(String[] args) {int totalThreads = 2;int maxCount = 100;for (int i = 1; i <= totalThreads; i++) {new Thread(new AlternatePrinting(i, totalThreads, maxCount)).start();}}}```2.```public class ABCPrinting implements Runnable { private static final Object lock = new Object();private static String turn = "A";private final String name;private final int maxPrints;public ABCPrinting(String name, int maxPrints) { = name;this.maxPrints = maxPrints;}@Overridepublic void run() {int prints = 0;while (prints < maxPrints) {synchronized (lock) {try {while (!turn.equals(name)) {lock.wait();}System.out.println(name);prints++;if (turn.equals("A")) {turn = "B";} else if (turn.equals("B")) {turn = "C";} else {turn = "A";}lock.notifyAll();Thread.sleep((long) (Math.random() * 1000)); } catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {int maxPrints = 10;new Thread(new ABCPrinting("A", maxPrints)).start(); new Thread(new ABCPrinting("B", maxPrints)).start(); new Thread(new ABCPrinting("C", maxPrints)).start(); }}```3.```public class BankOperation {private static final Object lock = new Object();private static int balance = 1000;public static void main(String[] args) {int numDeposits = 10;int numWithdrawals = 10;Thread depositThread = new Thread(() -> {for (int i = 0; i < numDeposits; i++) {synchronized (lock) {balance += 100;System.out.println("Deposit: 100, balance: " + balance);lock.notifyAll();}}});Thread withdrawalThread = new Thread(() -> {for (int i = 0; i < numWithdrawals; i++) {synchronized (lock) {if (balance < 200) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}balance -= 200;System.out.println("Withdrawal: 200, balance: " + balance); }}});depositThread.start();withdrawalThread.start();}}```四、总结在本篇文章中,我们通过多线程编程练习题的方式掌握了Java多线程的基础概念和编程技巧。

java多线程练习题

java多线程练习题

java多线程练习题Java多线程编程练习题[]选择题1.编写线程类,要继承的父类是:A:ObjectB:RunnableC:SerializableD:ThreadE:E某ception答2.编写线程类,可以通过实现那个接口来实现?A:RunnableB:ThrowableC:SerializableE:Cloneable答:3.什么方法用于终止一个线程的运行?A:leepB:joinC:waitD:topE:notify答:4.一个线程通过什么方法将处理器让给另一个优先级别相同的线程?A:waitB:yieldC:joinD:leepE:top答:5.如果要一个线程等待一段时间后再恢复执行此线程,需要调用什么方法?A:waitB:yieldC:joinD:leepE:topF:notify答:6.什么方法使等待队列中的第一个线程进入就绪状态?A:waitB:yieldC:joinD:leepE:topF:notify答:7.Runnable接口定义了如下哪些方法?A:tart()B:top()C:reume()D:run()E:upend()答:8.如下代码创建一个新线程并启动线程:Runnabletarget=newMyRunnable();ThreadmyThread=newThread(target);问:如下哪些类可以创建target对象,并能编译正确?A:publicclaMyRunnablee某tendRunnable{publicvoidrun(){}} B:publicclaMyRunnablee某tendObject{publicvoidrun(){}}C:publicclaMyRunnableimplementRunnable{publicvoidrun(){}} D:publicclaMyRunnablee某tendRunnable{voidrun(){}}E:publicclaMyRunnableimplementRunnable{voidrun(){}}答:9.给出代码如下:publicclaMyRunnableimplementRunnable{publicvoidrun(){--------------------------------}}问在虚线处,如下哪些代码可以创建并启动线程?A:newRunnable(MyRunnable).tart();B:newThread(MyRunnable).run();C:newThread(newMyRunnable()).tart();D:newMyRunnable().tart();答:[]问答题1.线程和进程有什么区别?2.Java创建线程的方式有哪些?[]编程题1.编写多线程应用程序,模拟多个人通过一个山洞的模拟。

Java第七单元练习题Java多线程机制(20210109223217)

Java第七单元练习题Java多线程机制(20210109223217)

7 Java 多线程机制7.1 单项选择题1. 线程调用了sleep ()方法后,该线程将进入( )状态。

A. 可运行状态B. 运行状态C. 阻塞状态D. 终止状态2. 关于java 线程,下面说法错误的是()A. 线程是以CPU为主体的行为B. java 利用线程使整个系统成为异步C. 创建线程的方法有两种:实现Runnable 接口和继承Thread 类D. 新线程一旦被创建,它将自动开始运行3. 在java 中的线程模型包含()A. 一个虚拟处理器B. CPU执行的代码C. 代码操作的数据D. 以上都是4. 在java 语言中,临界区可以是一个语句块,或者是一个方法,并用()关键字标识。

A. synchronizedB. includeC. importD. Thread5. 线程控制方法中,yield()的作用是()A. 返回当前线程的引用B. 使比其低的优先级线程执行C. 强行终止线程D. 只让给同优先级线程运行6. 线程同步中,对象的锁在()情况下持有线程返回A. 当synchronized()语句块执行完后B. 当在synchronized()语句块执行中出现例外( exception )时C. 当持有锁的线程调用该对象的wait()方法时D. 以上都是7. 在以下()情况下,线程就进入可运行状态A. 线程调用了sleep()方法时B. 线程调用了join()方法时C. 线程调用了yield()方法时D. 以上都是8. java 用()机制实现了进程之间的异步执行A. 监视器B. 虚拟机C. 多个CPUD. 异步调用9. Thread 类的方法中,toString() 方法的作用是()A. 只返回线程的名称B. 返回当前线程所属的线程组的名称C. 返回当前线程对象D. 返回线程的名称10. J ava 语言具有许多优点和特点,下列选项中,哪个反映了Java 程序并行机制的特点( )A. 安全性B. 多线程C. 跨平台D. 可移值11. 以下哪个关键字可以用来对对象加互斥锁()A. transientB. synchronizedC. serializeD. static12. 下面关于进程、线程的说法不正确的是( )。

java多线程选择题练习题

java多线程选择题练习题

java多线程选择题练习题一、填空题1、线程运行时将执行(start)方法中的代码。

02、在Java语言中,可以通过继承(Thread)类和实现(Runnable)接口来创建多线程。

3、使线程处于睡眠,使用(sleep )方法,将目前正在执行的线程暂停使用(wait)方法,取得当前线程名称采用(getName)方法。

4、Java语言中,采用(代码块)同步和(方法)同步解决死锁问题。

二、选择题1、当多个线程对象操作同一资源是,使用(B )关键字进行资源同步。

A transientB synchronizedC publicD static2、终止线程使用(D )方法。

A sleep()B yield()C wait()D destroy()三、简答题1、简述线程的生命周期。

Java语言使用Thread类及其子类的对象来表示线程,新建线程在它的一个完整生命周期内通常会经历5中状态——新建状态、就绪状态、运行状态、阻塞状态、消亡状态。

每个Java程序都有一个缺省的主线程。

对于Application,主线程是main()方法执行的线索。

2、什么是线程同步,并举例说明。

同步就是指多个操作在同一个时间段内只能有一个线程对共享资源进行操作,其它线程只有等到此线程对该资源的控制完成之后才能对共享资源进行操作。

举例:火车票预定过程如果当前的剩余票为1,则线程t1(表示一个预定用户)执行到了图所示的位置,而这时候因为该程序代码资源被其它线程共享,有可能线程t2(另一个预订用户)执行到了图所示的位置,当t2执行ticket--之后,ticket的值为0,而随后t1也会执行到刚才t2执行的位置,因此t1的输出结果为0。

出现上面问题的根本原因是程序代码被多个线程共享而交替运行,解决该问题关键是确保共享的代码块在某个时间只能被一个线程所拥有。

在Java语言中,利用同步解决该问题。

3、简述线程与进程的区别。

进程是程序的一次运行过程,因此进程是动态的。

《Java语言程序设计》(第3版)第7章

《Java语言程序设计》(第3版)第7章

第7章多线程与异常处理【1】java为什么要引入线程机制,线程,程序和进程之间的关系是怎样的?[解答]:Java之所以引入线程机制是因为:线程间的通信非常简单且有效,上下文切换非常快,它们是同一个进程中的两部分之进行的切换,每个线程彼此独立执行,一个程序可以同时使用多个线程来完成不同的任务。

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。

每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。

但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

Java程序设计基础(专,2020春)_第7章单元测验-多线程-10题0

Java程序设计基础(专,2020春)_第7章单元测验-多线程-10题0
C.导致线程等待
D.线程休眠
答案:B
6.下列有关sleep()方法的描述正确的是( )
A.属于Thread类的静态方法
B.方法参数中必传入毫秒值
C.方法是Object类的方法
D.让线程在指定的时间休眠
答案:ABD
7.开启线程,需要调用线程的start()方法。
答案:正确
8.死锁就是两个线程在运行时都在等待对方的锁。
答案:正确
9.被synchronized关键字修饰的方法称为同步方法。
答案:正确
10.一个进程只能包含一个线程。
答案:错误
试卷总分:10 得分:10
1.下列关于进程和线程的说法中,错误的是( )
A.操作系统中每个独立执行的程序都可称之为一个进程
B.线程和进程一样,是由CPU轮流执行的
C.操作系统中的每一个进程中都至少存在一个线程
D.线程和进程一样,是由CPU同时执行的
答案:D
2.下列有关线程的两种创建方式说法错误的是( )
A.大部分的多线程应用都会采用实现Runnable接口方式创建
B.实现Runnable接口相对于继承Thread类来说,可以避免由于Java的单继承带来的局限性
C.通过继承Thread类与实现Runnable接口都可以创建多线程程序
D.通过继承Thread类与实现Runnable接口创建多线程这两种方式没有区别
答案:B
4.下列关于线程优先级的描述,错误的是( )
A.一般情况下,主函数具有普通优先级
B.优先级高的线程获得先执行权的几率越大
C.新建线程的优先级默认为最低
D.NORM_PRIORITY代表普通优先级,默认值是5

java 多线程练习题

java 多线程练习题

java 多线程练习题Java多线程练习题在Java中,多线程是非常常见和重要的概念。

通过使用多线程,我们可以实现并发处理和同时执行多个任务。

为了熟悉和掌握多线程的用法,下面将给出一些Java多线程的练习题。

1. 编写一个Java程序,创建两个线程,分别输出从1到50和从51到100的数字。

确保两个线程交替输出数字,即输出的结果应为:1,51,2,52,3,53...,99,100。

2. 编写一个Java程序,创建三个线程,分别输出字符A、字符B和字符C。

确保三个线程按顺序交替输出字符,即输出的结果应为:ABCABCABC...3. 编写一个Java程序,模拟购票系统。

假设有100张票,多个窗口同时售票,要求保证售出的票没有重复,即每张票只能卖给一个人。

4. 编写一个Java程序,使用多线程实现生产者-消费者模型。

假设有一个信号灯,生产者线程可以向信号灯放置数据,消费者线程可以从信号灯中取走数据。

要求生产者线程和消费者线程交替执行,确保生产者放置数据后,消费者才能取走数据。

5. 编写一个Java程序,使用多线程计算1到100之间所有数字的和。

要求将任务分成10个子任务,由10个线程并行地执行,并最后将子任务的计算结果合并得到最终结果。

6. 编写一个Java程序,实现一个简单的线程池。

线程池中包含固定数量的线程,多余的任务将会排队等待执行。

当新的任务到达时,如果有空闲线程,则立即执行,否则任务将会进入等待队列。

以上是一些Java多线程的练习题,通过完成这些练习题,您将熟悉和掌握多线程的基本用法和常见应用场景。

希望这些练习题对您的学习和实践有所帮助!。

多线程考试试题含答案

多线程考试试题含答案

多线程考试试题含答案一、单选题(每题2分,共10分)1.在Java中,哪个类是用来创建线程的?A.ThreadB.RunnableC.CallableD.ExecutorService答案:A2.线程的优先级范围是多少?A.1-10B.0-5C.1-5D.0-10答案:A3.线程的生命周期中,哪个状态表示线程正在执行?A.新建(New)B.可运行(Runnable)C.阻塞(Blocked)D.死亡(Terminated)答案:B4.在Java中,哪个方法是用于启动线程的?A.start()B.run()C.join()D.sleep()答案:A5.线程同步可以使用哪种关键字?A.finalB.volatileC.synchronizedD.transient答案:C二、多选题(每题3分,共15分)1.以下哪些是线程间通信的方式?A.wait()和notify()B.wait()和notifyAll()C.join()D.共享资源答案:ABCD2.在Java中,哪些是创建线程的正确方式?A.继承Thread类B.实现Runnable接口C.实现Callable接口D.使用ExecutorService答案:ABCD3.线程的哪些状态表示线程不在运行?A.可运行(Runnable)B.阻塞(Blocked)C.等待(Waiting)D.睡眠(Sleeping)答案:BCD4.以下哪些是线程池的类型?A.固定大小的线程池B.可缓存的线程池C.单线程执行器D.定时以及周期性执行的线程池答案:ABCD5.线程安全问题通常发生在哪些情况下?A.多个线程访问同一个资源B.一个线程在执行过程中被中断C.多个线程对共享资源进行写操作D.线程执行顺序不确定答案:ACD三、判断题(每题2分,共10分)1.线程一旦启动,就无法停止。

(对/错)答案:对2.线程的sleep()方法可以响应中断。

(对/错)答案:错3.线程的优先级可以随意设置,不受系统限制。

java多线程试题-答案

java多线程试题-答案

多线程一.选择题1.下列说法中错误的一项是(A)A.线程就是程序B。

线程是一个程序的单个执行流B.多线程是指一个程序的多个执行流D。

多线程用于实现并发2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D)A.等待阴塞状态下的线程被notify()唤B.等待阻塞状态下的纯种被interrput()中断C.等待时间到D.等待阻塞状态下的线程调用wait()方法3.下列哪个方法可以使线程从运行状态进入其他阻塞状态(A)A.sleep B。

wait C.yield D.start4.下列说法中错误的一项是(D)A.一个线程是一个Thread类的实例B.线程从传递给纯种的Runnable实例run()方法开始执行C.线程操作的数据来自Runnable实例D.新建的线程调用start()方法就能立即进入运行状态5.下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D)A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成B.线程A通过调用interrupt()方法来中断其阻塞状态C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中D.currentThread()方法返回当前线程的引用6.下列说法中,错误的一项是()A.对象锁在synchronized()语句执行完之后由持有它的线程返还B.对象锁在synchronized()语句中出现异常时由持有它的线程返还C.当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁D.当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁7.下面的哪一个关键字通常用来对对象的加锁,从而使得对对象的访问是排他的 AA.sirialize B transient C synchronized D static二.填空题1. 在操作系统中,被称做轻型的进程是线程2。

多线程程序设计的含义是可以将一个程序任务分成几个并行的任务3。

多线程考试题及答案

多线程考试题及答案

多线程考试题及答案一、选择题(每题3分,共30分)1. 在Java中,创建多线程的方式有几种?A. 1种B. 2种C. 3种D. 4种答案:B2. 以下哪个类是Java中实现多线程的基类?A. ObjectB. ThreadC. RunnableD. Callable答案:B3. 线程的优先级范围是多少?A. 1-10B. 0-5C. 0-10D. 1-5答案:A4. 线程的sleep方法和wait方法有什么区别?A. sleep方法会释放锁,wait方法不会释放锁B. sleep方法不会释放锁,wait方法会释放锁C. sleep方法和wait方法都会释放锁D. sleep方法和wait方法都不会释放锁答案:A5. 线程的join方法有什么作用?A. 终止当前线程B. 等待该线程终止C. 释放CPU资源D. 暂停线程的执行答案:B6. 在Java中,如何创建一个守护线程?A. 继承Thread类B. 实现Runnable接口C. 调用Thread.setDaemon(true)D. 调用Thread.setPriority(Thread.MIN_PRIORITY) 答案:C7. 线程安全问题通常发生在什么情况下?A. 单线程程序中B. 多线程程序中C. 任何程序中D. 只有并发程序中答案:B8. synchronized关键字可以用于什么?A. 方法B. 代码块C. 类D. 所有以上选项答案:D9. 以下哪个类提供了线程池功能?A. ExecutorB. ExecutorServiceC. ThreadPoolExecutorD. 所有以上选项答案:D10. 在Java中,如何实现线程间的通信?A. 使用wait和notify方法B. 使用synchronized关键字C. 使用volatile关键字D. 所有以上选项答案:D二、填空题(每题2分,共20分)1. Java中,创建线程可以通过继承________类或者实现________接口来实现。

java习题及答案第7章 习题参考答案

java习题及答案第7章 习题参考答案

第7章多线程编程1.什么是线程?与进程有何不同?答:线程是操作系统中重要概念之一,是程序运行的基本执行单元,与进程一样,也有创建、销毁和切换等状态,但负荷远小于进程,又称为轻量级进程。

与进程不同的是:占用的资源少,不像进程那样可由几个线程组成,在Java语言中,用ng.Thread类创建和管理线程,而进程是由ng.Process类等类创建和管理。

2.使用多线程的优势何在?答:使用多线程具有很多优势,这主要表现在如下五方面:充分利用CPU资源;简化编程模型;简化异步事件的处理;使GUI程序更有效率;节约成本。

3.主要的线程状态有哪些?它们之间是如何转换的?答:线程主要有如下5个状态:New(新)、Runnable(可运行、就绪)、Running(运行)、Blocked(被阻塞、挂起)和Dead(死亡),它们之间转换如下图所示:4.简述创建线程的两种方法及各自的步骤。

答:第一种方法是通过继承Thread类编写用户自己的线程类,而后创建实例,步骤为:➢定义自己的线程类MyThread,并覆盖Thread类的run(),实现所需功能;➢实例化MyThread类,并用start()方法启动。

第二种方法是通过实现Runnable接口来创建线程,使用Runnable接口创建线程的步骤为:➢实现Runnable接口,如实现了该接口的类为MyRunnable,并在MyRunnable类的run()方法里编写想让线程执行的代码;➢创建实现了Runnable接口类的实例,如创建MyRunnable类的实例为myRunnable;➢创建线程类Thread的实例,并用构造方法Thread(Runnable)将myRunnable赋值给target。

5.简述sleep()方法的作用,并修改例7.10中休眠部分,体会线程有无休眠的差异。

答:sleep()作为休眠方法,可让线程休眠一段时间,此期间线程不消耗CPU资源。

传入参数是休眠的时间,单位为毫秒。

java多线程试题-答案

java多线程试题-答案

多线程一.选择题1.下列说法中错误的一项是(A)A.线程就是程序B.线程是一个程序的单个执行流B.多线程是指一个程序的多个执行流D.多线程用于实现并发2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D)A.等待阴塞状态下的线程被notify()唤B.等待阻塞状态下的纯种被interrput()中断C.等待时间到D.等待阻塞状态下的线程调用wait()方法3.下列哪个方法可以使线程从运行状态进入其他阻塞状态(A)A.sleepB.waitC.yieldD.start4.下列说法中错误的一项是(D)A.一个线程是一个Thread类的实例B.线程从传递给纯种的Runnable实例run()方法开始执行C.线程操作的数据来自Runnable实例D.新建的线程调用start()方法就能立即进入运行状态5.下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D)A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成B.线程A通过调用interrupt()方法来中断其阻塞状态C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中D.currentThread()方法返回当前线程的引用6.下列说法中,错误的一项是()A.对象锁在synchronized()语句执行完之后由持有它的线程返还B.对象锁在synchronized()语句中出现异常时由持有它的线程返还C.当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁D.当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁7.下面的哪一个关键字通常用来对对象的加锁,从而使得对对象的访问是排他的 AA.sirialize B transient C synchronized D static二.填空题1. 在操作系统中,被称做轻型的进程是线程2. 多线程程序设计的含义是可以将一个程序任务分成几个并行的任务3. 在Java程序中,run()方法的实现有两种方式:实现Runnable接口和继承Thread类4 .多个线程并发执行时,各个线程中语句的执行顺序是确定的,但是线程之间的相对执行顺序是不确定的6.Java中的对象锁是一种独占的排他锁7.程序中可能出现一种情况:多个线种互相等待对方持有的锁,而在得到对方的锁之前都不会释放自己的锁,这就是死锁8.线程的优先级是在Thread类的常数MIN_PRIORITY 和MAX_PRIORITY之间的一个值9.处于新建状态的线程可以使用的控制方法是start() 和stop() 。

Java多线程习题

Java多线程习题

Java多线程习题知识点:Java的多线程,实现多线程的两种方法,线程控制、调度方法一、选择题1、什么原因可导致线程停止执行。

()A.线程调用了 wait()方法;B.线程调用了yield()方法;C.线程调用了 pause()方法;D.线程调用了 sleep() 方法。

2、哪个方法是实现Runnable接口所需的?A.wait() B.run() C.stop() D.update() E.resume() 3、以下代码的调试结果为?()public class Bground extends Thread{public static void main(String argv[]){Bground b = new Bground();b.run();}public void start(){for (int i = 0; i <10; i++){System.out.println("Value of i = " + i);}}}A.编译错误,没有定义线程的run方法;B.由于没有定义线程的run方法,而出现运行错误;C. 编译通过,运行输出 values 0 to 9D. 编译通过,运行无输出4、有关线程的叙述正确的有:()A.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。

B. 可以获得对任何对象的互斥锁定。

C. 线程通过调用对象的synchronized 方法可取得对象的互斥锁定。

D. 线程调度算法是平台独立的。

5、以下哪个是线程类的方法?A.yield()B. sleep(long msec)C. go()D. stop()6、以下哪个最准确描述synchronized关键字?A.允许两线程并行运行,而且互相通信;B. 保证在某时刻只有一个线程可访问方法或对象;C. 保证允许两个或更多处理同时开始和结束;D. 保证两个或更多线程同时开始和结束。

java 多线程编程练习题

java 多线程编程练习题

java 多线程编程练习题Java多线程编程练习题Java是一种广泛应用于软件开发领域的编程语言,其强大的多线程编程能力使得开发者能够更好地利用计算机的多核处理器,提高程序的并发性和性能。

在这篇文章中,我们将探讨一些Java多线程编程的练习题,帮助读者加深对多线程编程的理解和应用。

1. 线程创建与启动首先,我们来看一个简单的练习题:创建一个线程并启动它。

在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。

下面是一个使用继承Thread类的示例:```javapublic class MyThread extends Thread {public void run() {System.out.println("Hello, I am a thread!");}}public class Main {public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}}```2. 线程同步与互斥在多线程编程中,线程同步和互斥是非常重要的概念。

下面是一个练习题:使用synchronized关键字实现两个线程的互斥执行。

```javapublic class Counter {private int count = 0;public synchronized void increment() {count++;}public synchronized void decrement() {count--;}public int getCount() {return count;}}public class IncrementThread extends Thread {private Counter counter;public IncrementThread(Counter counter) {this.counter = counter;}public void run() {for (int i = 0; i < 1000; i++) {counter.increment();}}}public class DecrementThread extends Thread {private Counter counter;public DecrementThread(Counter counter) {this.counter = counter;}public void run() {for (int i = 0; i < 1000; i++) {counter.decrement();}}}public class Main {public static void main(String[] args) throws InterruptedException {Counter counter = new Counter();IncrementThread incrementThread = new IncrementThread(counter); DecrementThread decrementThread = new DecrementThread(counter);incrementThread.start();decrementThread.start();incrementThread.join();decrementThread.join();System.out.println("Count: " + counter.getCount());}}```3. 线程通信线程通信是多线程编程中的另一个重要概念。

多线程练习题目

多线程练习题目

多线程一、单项1.下述哪个选项为真?( )A.Error类是一个RoutimeException异常B.任何抛出一个RoutimeException异常的语句必须包含在try块之内C.任何抛出一个Error对象的语句必须包含在try块之内D. 任何抛出一个Exception异常的语句必须包含在try块之内2.下列关于Java线程的说法哪些是正确的?( )A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题C.Thread类属于java.util程序包D.以上说法无一正确3.哪个关键字可以对对象加互斥锁?( )A.transientB.synchronizedC.serializeD.static4.下列哪个方法可用于创建一个可运行的类?()A.public class X implements Runable { public void run() {……} }B. public class X implements Thread { public void run() {……} }C. public class X implements Thread { public int run() {……} } D.public class X implements Runable { protected void run() {……} }5.下面哪个选项不会直接引起线程停止执行?( )A.从一个同步语句块中退出来B.调用一个对象的wait方法C.调用一个输入流对象的read方法D.调用一个线程对象的setPriority方法6.使当前线程进入阻塞状态,直到被唤醒的方法是( )A.resume()方法B.wait()方法C.suspend()方法D.notify()方法7.运行下列程序,会产生的结果是( )public class X extends Thread implements Runnable {public void run(){System.out.println(“this is run()”);}public static void main(String[] args){Thread t=new Thread(new X());t.start();}}A.第一行会发生编译错误B. 第六行会发生编译错误C.第六行会发生运行错误D.程序会运行和启动ng.ThreadGroup类的作用为 ( )A.使任何类都可以为线程提供线程体B.定义了线程与交互的方法C.提供了线程组或组中的每个线程进行操作的方法D.以上都不是9.实现线程的创建有( )方法A.一种 B. 两种 C.三种 D.四种10.一个进程可以包含( )个线程A.一B. 二C. 三D.四11.Java中的线程模型包含( )A.一个虚拟处理机B.CPU执行的代码C.代码操作的数据D.以上都是12.关于线程组以下说法错误的是( )A.在应用程序中线程可以独立存在,不一定要属于某个线程B.一个线程只能创建时设置其线程组C.线程组由ng包中的ThreadGroup类实现D.线程组使一组线程可以作为一个对象进行统一处里或维护13.下列定义线程方法正确的是( )A.Public Thread();B.Public Thread(Runnable target);C.Public Thread(ThreadGroup group,Runnable target);D.以上都正确14.以下不属于Thread类提供的线程控制方法是( )A.break()B.sleep()C.yield()D.join()15.下列关于线程的说法正确的是( )A.线程就是进程B.线程在操作系统出现后就产生了C.Soloris是支持线程的操作系统D.在单处理器和多处理器上多个线程不可以并发执行16.下列不属于线程生命周期状态的是( )A. 新建状态B.可运行状态C. 运行状态D.解锁状态17.以下不属于Thread类的线程优先级静态常量的是( )A.MIN_PRIORITYB.MAX__PRIORITYC.NORM__PRIORITYD.BEST__PRIORITY18.( )关键字可以对对象加互斥锁。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7Java多线程机制
7.1单项选择题
1. 线程调用了sleep()方法后,该线程将进入()状态。

A. 可运行状态
B. 运行状态
C. 阻塞状态
D. 终止状态
2. 关于java线程,下面说法错误的是()
A. 线程是以CPU为主体的行为
B. java利用线程使整个系统成为异步
C. 创建线程的方法有两种:实现Runnable接口和继承Thread类
D. 新线程一旦被创建,它将自动开始运行
3. 在java中的线程模型包含()
A. 一个虚拟处理器
B. CPU执行的代码
C. 代码操作的数据
D. 以上都是
4.在java语言中,临界区可以是一个语句块,或者是一个方法,并用()关键字标识。

A. synchronized
B. include
C. import
D. Thread
5. 线程控制方法中,yield()的作用是()
A. 返回当前线程的引用
B. 使比其低的优先级线程执行
C. 强行终止线程
D. 只让给同优先级线程运行
6. 线程同步中,对象的锁在()情况下持有线程返回
A. 当synchronized()语句块执行完后
B. 当在synchronized()语句块执行中出现例外(exception)时
C. 当持有锁的线程调用该对象的wait()方法时
D. 以上都是
7. 在以下()情况下,线程就进入可运行状态
A. 线程调用了sleep()方法时
B. 线程调用了join()方法时
C. 线程调用了yield()方法时
D. 以上都是
8. java用()机制实现了进程之间的异步执行
A. 监视器
B. 虚拟机
C. 多个CPU
D. 异步调用
9.Thread类的方法中,toString()方法的作用是()
A. 只返回线程的名称
B. 返回当前线程所属的线程组的名称
C. 返回当前线程对象
D. 返回线程的名称
10.Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点()
A. 安全性
B. 多线程
C. 跨平台
D. 可移值
11.以下哪个关键字可以用来对对象加互斥锁?()
A. transient
B. synchronized
C. serialize
D. static
12.下面关于进程、线程的说法不正确的是( )。

A.进程是程序的一次动态执行过程。

一个进程在其执行过程中,可以产生多个线程——多线程,形成多条执行线索。

B.线程是比进程更小的执行单位,是在一个进程中独立的控制流,即程序内部的控制流。

线程本身不能自动运行,栖身于某个进程之中,由进程启动执行。

C.Java多线程的运行与平台无关。

D.对于单处理器系统,多个线程分时间片获取CPU或其他系统资源来运行。

对于多处理器系统,线程可以分配到多个处理器中,从而真正的并发执行多任务。

7.2填空题
1.________是java程序的并发机制,它能同步共享数据、处理不同的事件。

2.线程是程序中的一个执行流,一个执行流是由CPU运行程序的代码、__________所形
成的,因此,线程被认为是以CPU为主体的行为。

3.线程的终止一般可以通过两种方法实现:自然撤销或者是__________.
4.线程模型在java中是由__________类进行定义和描述的。

5.线程的创建有两种方法:实现_________接口和继承Thread类。

6.多线程程序设计的含义是可以将程序任务分成几个________的子任务。

7.按照线程的模型,一个具体的线程也是由虚拟的CPU、代码与数据组成,其中代码与数
据构成了___________,线程的行为由它决定。

8.ava中,新建的线程调用start()方法、如myThread.start(),将使线程的状态从New(新建状
态)转换为_________。

9.多线程是java程序的________机制,它能同步共享数据,处理不同事件。

10.进程是由代码、数据、内核状态和一组寄存器组成,而线程是表示程序运行状态的
______,如程序计数器、栈指针以及堆栈组成。

11.Thread类提供了一系列基本线程控制方法,如果我们需要让与当前进程具有相同优先
级的线程也有运行的机会则可以调用________方法。

12.在多线程系统中,多个线程之间有________和互斥两种关系。

13. 在一个时间只能由一个线程访问的资源称为临界资源,访问临界资源的代码___________。

7.3判断题
1.一个Java多线程的程序不论在什么计算机上运行,其结果始终是一样的。

(×)
2.Java线程有五种不同的状态,这五种状态中的任何两种状态之间都可以相互转换。

(×)
3.所谓线程同步就是若干个线程都需要使用同一个synchronized修饰的方法。

(√)
4.使用Thread子类创建线程的优点是可以在子类中增加新的成员变量,使线程具有某种
属性,也可以在子类中新增加方法,使线程具有某种功能。

但是,Java不支持多继承,Thread类的子类不能再扩展其他的类。

(√)
5.Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,
分别用Thread类中的类常量表示。

每个Java线程的优先级都在常数1和10之间,即Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间。

如果没有明确地设置线程的优先级别,每个线程的优先级都为常数8。

(×)
6.当线程类所定义的run( )方法执行完毕,线程的运行就会终止。

(√)
7.线程的启动是通过引用其start()方法而实现的。

(√)
7.4简答题
1.同步和异步有何异同,在什么情况下分别使用他们?举例说明。

2.在Java中,怎样创建一个线程?
7.5参考答案
7.5.1单项选择题:
1.C
2.D
3.D
4.A
5.D
6.D
7.C
8.A
9.D 10.B 11.B 12.C
7.5.2填空题
1. 多线程
2. 操纵程序的数据
3. 被停止
4. ng.Thread
5. Runnable
6. 并行
7. 线程体
8. 可运行状态
9. 并发
10.寄存器
11.yield()
12.同步
13.临界代码
7.5.3判断题
1.×
2. ×
3.√
4.√
5. ×
6. √
7. √
7.5.4简答题
1. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

如果数据将在线程间共享。

例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

2.在Java中,怎样创建一个线程?
答:
方法一:定义类来实现Runnable接口
class TestThread implements Runnable {
public void run() { …}
}
方法二:继承Thread类来实现
class TestThread extends Thread {
TestThread(String name) {
super(name);
start();
}
public void run() {…}
}。

相关文档
最新文档