多线程

一、选择题

1.下列说法中错误的一项是( )
A. 线程就是程序
B. 线程是一个程序的单个执行流
C. 多线程是指一个程序的多个执行流
D. 多线程用于实现并发
答案:A

2.下列哪个方法可以使线程从运行状态进入阻塞状态( )
A. sleep
B. wait
C. yield
D. start
答案:A

3.下列说法中错误的一项是( )
A. 一个线程是一个Thread类的实例
B. 线程从传递给纯种的Runnable实例run()方法开始执行
C. 线程操作的数据来自Runnable实例
D. 新建的线程调用start()方法就能立即进入运行状态
答案:D

4.下列说法中,错误的一项是( )
A. 对象锁在synchronized()语句执行完之后由持有它的线程返还
B. 对象锁在synchronized()语句中出现异常时由持有它的线程返还
C. 当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁
D. 当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁
答案:B

5.哪个方法是实现Runnable 接口所需的( )?
A.wait()
B.run()
C.stop()
D.resume()
答案:B

6、什么原因可导致线程停止执行。( )
A.线程调用了wait()方法;
B.线程调用了yield()方法;
C.线程调用了pause()方法;
D.线程调用了sleep() 方法。
答案:C

7、在java 程序中,下列关于线程的说法错误的是: ( )
A、run 方法是运行线程的主体
B、多个进程运行时执行顺序是按顺序执行的
C、如果线程死亡,它便不能运行
D、在java 中,高优先级的可运行线程会抢占低优先级线程
答案:B

8.实现线程体的方式除了继承Thread 类,还可以实现接口( )
A、Cloneable
B、Runnable
C、Iterable
D、Serializable
答案:B

二.填空题

1.在Java程序中,run()方法的实现有两种方式:(继承Thread类 )和 (实现接口Runnable)。

2.一个进程可以包含多个 (线程)。

3.若在高优先级线程的run( )方法中调用( yield() )方法,则该线程将让出CPU。

4.在执行Java 线程的程序中,程序通过调用(start())方法启动线程,随后又调用(run())方法执行线程体。

5.Java 线程程序可以调用(sleep())方法,使线程进入睡眠状态,可以通过调用(setPriority())方法设置线程的优先级。

三、判断题

1、启动多线程必须调用start()方法, 如果调用run 方法则没有启动新的线程。( T

2、run 方法是运行线程的主体,若run 方法运行结束,线程就消亡了。( T

3、要在程序中实现多线程,必须在源程序前面使用import 语句显示的导入Thread 类。( F

4、线程可以用yield 方法使较低优先级的线程运行。( F

5、每个Java 线程的优先级都设置在常数1~12 之间,默认的优先级设置为常数6( F

四.简答题

1.同步和异步有何异同,在什么情况下分别使用他们?举例说明
答: 如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

2.启动一个线程是用 run() 还是 start()?
答: 启动一个线程是调用start()方法,线程进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

3.多线程有几种实现方法 , 都是什么 ?
答: 多线程有两种实现方法,分别是继承 Thread类与实现Runnable接口

4.同步有几种实现方法 , 都是什么 ?
答:同步的实现方面有两种,分别是同步方法与同步代码块

5.线程的生命周期,以及他们的作用
创建状态:创建一个线程
就绪状态:等待调度程序分配CPU资源给这个线程运行
运行状态:调度程序分配资源给该进程,该进程正在执行
阻塞状态:线程在等待某个条件,才会具备运行的条件
死亡状态:线程死亡,结束