Java多线程习题 联系客服

发布时间 : 星期三 文章Java多线程习题更新完毕开始阅读2895b116cc7931b765ce15f6

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(\ } } }

A.编译错误,没有定义线程的run方法;

B.由于没有定义线程的run方法,而出现运行错误; C. 编译通过,运行输出 values 0 to 9 D. 编译通过,运行无输出 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. 保证两个或更多线程同时开始和结束。

7、于Java语言的内存回收机制,下列选项中最正确的一项是( )。 A、Java程序要求用户必须手工创建一个线程来释放内存 B、Java程序允许用户使用指针来释放内存 C、内存回收线程负责释放无用内存 D、内存回收线程不能释放内存对象 8、下列哪一个类实现了线程组?( )

A、java.lang.Objict B、java.1ang.ThreadGroup C、Java.1ang.Thread D、java.1ang.Runnable

9、下列说法中错误的一项是( )。

A、Applet必须全部重写其生命周期方法 B、Applet不必全部重写其生命周期方法

C、Applet中使用了线程,则需要重写相应的生命周期方法 D、stop( )总是在destroy( )之前被调用。

10、在java程序中,下列关于线程的说法错误的是: ( ) A、run方法是运行线程的主体

B、多个进程运行时执行顺序是按顺序执行的 C、如果线程死亡,它便不能运行

D、在java中,高优先级的可运行线程会抢占低优先级线程

11、关于JDBC访问数据库的说法错误的是: ( ) A、建立数据库连接时,必须加载驱动程序,可采用Class.forName()实现

B、 用于建立与某个数据源的连接可采用DriverManager类的getConnection方法 C、建立数据库连接时,必须要进行异常处理

D、JDBC中查询语句的执行方法必须采用Statement类实现 12、运行下列程序, 会产生什么结果 ( )

public class X extends Thread implements Runable{ public void run(){

System.out.println(\ }

public static void main(String args[]) {

Thread t=new Thread(new X()); t.start(); } }

A) 第一行会产生编译错误 B) 第六行会产生编译错误 C) 第六行会产生运行错误 D) 程序会运行和启动 13、下面哪个方法可以在任何时候被任何线程调用? ( )

A) notify() B) wait() C) notifyAll() D) sleep() E) yield() F) synchronized(this) 14、下列哪些情况可以终止当前线程的运行? ( )

A) 抛出一个例外时。 B) 当该线程调用sleep()方法时。

C) 当创建一个新线程时。 D) 当一个优先级高的线程进入就绪状态时。 15、在java程序中,下列关于线程的说法错误的是( )

A) 线程启动调用start方法 B) 线程的主体是run方法

C) 线程运行中调用sleep方法可以进入阻塞状态

D) 在java中,优先级的数值为1的线程可以抢占优先级为5的线程的资源 16、下面关于Java中线程的说法不正确的是( )?

A)调用join()方法可能抛出异常InterruptedException。 B)sleep()方法是Thread类的静态方法。

C)调用Thread类的sleep()方法可终止一个线程对象。 D)线程启动后执行的代码放在其run方法中。

17、Thread类用来创建和控制线程,一个线程从下面( )方法开始执行。

A) init() B) start() C) run() D) notifyAll() 18.实现线程体的方式除了继承Thread类,还可以实现 接口。

E) A、Cloneable B、Runnable C、Iterable D、Serializable

二、填空题 1、若在高优先级线程的run( )方法中调用___ ___方法,则该线程将让出CPU,使其他___

____的线程获得CPU的使用权。

2、通过实现Runnable接口创建线程的过程是:将实现Runnable的一个___ _______作为

target参数传递给Thread类的____ ______,该对象提供线程体。

3、线程通过 方法可以休眠一段时间,然后恢复运行,当 时,线程进入死亡状态。

4、编写一个线程可以用 和 来实现。

5、在执行Java线程的程序中,程序通过调用_______方法启动线程,随后又调用________方法。

6、编写一个线程可以用继承 类和实现 接口来实现。

7、在执行Java线程的程序中,程序通过调用____ _方法启动线程,随后又调用_____方法。

8、如果几个并发线程对相同的数据对象进行存取,可能导致数据不一致,为避免发生这种情况,需要编程实现线程同步,在执行访问共享数据的代码时对数据加互斥锁,加锁语句的关键字是_______ ___________,如果编程时不注意,加锁可能导致死锁,避免死锁的一般做法是 。

9、Java线程程序可以调用___________方法,使线程进入睡眠状态,可以通过调用__ _________________方法设置线程的优先级。

10、通过实现接口 可以创建一个包含线程体的类,该接口只申明了一个方法: ,假定一个线程体对象为rt,则可以用Thread myThread = 语句来创建一个线程对象,并用语句 启动myThread线程对象。

11、阅读下面的程序MyAdd.java,填写划线部分的语句或注释,并写出程序执行结果。 public class MyAdd { //继承线程类 static int total = 10; int n;

public MyAdd(int n){

this.n=n; }

public void run() { try{

sleep(n); //含义是: total=total+n;

System.out.println(total); }

catch(Exception e){

System.out.println(“EXCEPTION!”); }

}

public static void main(String[] args) { MyAdd t1 = new MyAdd(3000);

; //启动线程t1 } }

12、请完成下列Java程序:运行3个线程,每一个线程有自己的标志,用a,b,c表示,每个线程显示一个”Start”信息和一个”End”信息并且间隔地显示2个“Loop”信息(间隔变化为(0.5~2)秒之间的随机延迟)。

程序运行结果如下:(注:由于时间间隔为随机数,所以,运行结果的顺序不惟一) a Start b Start c Start b Loop a Loop b Loop b End

c Loop a Loop a End c Loop c End

注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填放适当的语句。 Public class ex2_2 implements Runnable{ static char flag2_2=’a’;

public static void main(String[ ]arg){ ex2_2 obj2_2=new ex2_2 ( );

Thread thread2_2=new Thread(obj2_2); thread2_2.start();

thread2_2=new Thread(obj2_2); thread2_2.start();

thread2_2=new‘Thread(obj2_2); thread2_2.start(); }

public void run(){ char myflag2_2;

synchronized(this){ ________________ ; }

System.out.println(myflag2_2+”Start”); for(int i=0;i<2;i++){ try{

Thread.sleep(rand(500,2000));

System.out.println(myflag2_2+”Loop”); }catch(InterruptedException ie){

System.out.prinfln(ie); } }

System.out.println(myflag2_2+”End”);

}

final private int rand(int low,int high){

return(________________);

} }

13、下面的程序利用线程输出从a到z的26个字母,每隔一秒钟输出一个字母,程序不完整,请阅读程序代码,根据注释要求在划线处补充完成代码。 public class Test4 implements Runnable {

char charArray[]=new char[26]; public Test4() { for(int i = 0; i

public void run() {

try