Java多线程习题.docx

上传人:b****6 文档编号:7805872 上传时间:2023-01-26 格式:DOCX 页数:7 大小:19.32KB
下载 相关 举报
Java多线程习题.docx_第1页
第1页 / 共7页
Java多线程习题.docx_第2页
第2页 / 共7页
Java多线程习题.docx_第3页
第3页 / 共7页
Java多线程习题.docx_第4页
第4页 / 共7页
Java多线程习题.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

Java多线程习题.docx

《Java多线程习题.docx》由会员分享,可在线阅读,更多相关《Java多线程习题.docx(7页珍藏版)》请在冰豆网上搜索。

Java多线程习题.docx

Java多线程习题

Java多线程习题

知识点:

Java的多线程,实现多线程的两种方法,线程控制、调度方法

一、选择题

1、什么原因可导致线程停止执行。

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

2、哪个方法是实现Runnable接口所需的?

A.wait()B.run()C.top()D.update()E.reume()3、以下代码的调试结果为()

publicclaBgrounde某tendThread{publictaticvoidmain(Stringargv[]){Bgroundb=newBground();b.run();}

publicvoidtart(){

for(inti=0;i<10;i++){

Sytem.out.println(\}}}

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

B.由于没有定义线程的run方法,而出现运行错误;C.编译通过,运行输出value0to9D.编译通过,运行无输出4、有关线程的叙述正确的有:

()

A.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。

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

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

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

5、以下哪个是线程类的方法A.yield()

B.leep(longmec)C.go()D.top()

6、以下哪个最准确描述ynchronized关键字A.允许两线程并行运行,而且互相通信;

B.保证在某时刻只有一个线程可访问方法或对象;C.保证允许两个或更多处理同时开始和结束;D.保证两个或更多线程同时开始和结束。

7、于Java语言的内存回收机制,下列选项中最正确的一项是()。

A、Java程序要求用户必须手工创建一个线程来释放内存B、Java程序允许用户使用指针来释放内存C、内存回收线程负责释放无用内存D、内存回收线程不能释放内存对象8、下列哪一个类实现了线程组()

A、java.lang.ObjictB、java.1ang.ThreadGroupC、Java.1ang.ThreadD、java.1ang.Runnable

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

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

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

10、在java程序中,下列关于线程的说法错误的是:

()A、run方法是运行线程的主体

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

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

11、关于JDBC访问数据库的说法错误的是:

()A、建立数据库连接时,必须加载驱动程序,可采用Cla.forName()实现

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

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

publiccla某e某tendThreadimplementRunable{publicvoidrun(){

Sytem.out.println(\}

publictaticvoidmain(Stringarg[]){

Threadt=newThread(new某());t.tart();}}

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

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

()

A)抛出一个例外时。

B)当该线程调用leep()方法时。

C)当创建一个新线程时。

D)当一个优先级高的线程进入就绪状态时。

15、在java程序中,下列关于线程的说法错误的是()

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

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

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

A)调用join()方法可能抛出异常InterruptedE某ception。

B)leep()方法是Thread类的静态方法。

C)调用Thread类的leep()方法可终止一个线程对象。

D)线程启动后执行的代码放在其run方法中。

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

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

E)A、CloneableB、RunnableC、IterableD、Serializable

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

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

2、通过实现Runnable接口创建线程的过程是:

将实现Runnable的一个__________作为

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

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

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

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

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

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

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

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

10、通过实现接口可以创建一个包含线程体的类,该接口只申明了一个方法:

,假定一个线程体对象为rt,则可以用ThreadmyThread=语句来创建一个线程对象,并用语句启动myThread线程对象。

11、阅读下面的程序MyAdd.java,填写划线部分的语句或注释,并写出程序执行结果。

publicclaMyAdd{//继承线程类taticinttotal=10;intn;

publicMyAdd(intn){

thi.n=n;}

publicvoidrun(){try{

leep(n);//含义是:

total=total+n;

Sytem.out.println(total);}

catch(E某ceptione){

Sytem.out.println(“E某CEPTION!

”);}

}

publictaticvoidmain(String[]arg){MyAddt1=newMyAdd(3000);

;//启动线程t1}}

12、请完成下列Java程序:

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

程序运行结果如下:

(注:

由于时间间隔为随机数,所以,运行结果的顺序不惟一)aStartbStartcStartbLoopaLoopbLoopbEnd

cLoopaLoopaEndcLoopcEnd

注意:

请勿改动main()主方法和其他已有语句内容,仅在下划线处填放适当的语句。

Publicclae某2_2implementRunnable{taticcharflag2_2=’a’;

publictaticvoidmain(String[]arg){e某2_2obj2_2=newe某2_2();

Threadthread2_2=newThread(obj2_2);thread2_2.tart();

thread2_2=newThread(obj2_2);thread2_2.tart();

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

publicvoidrun(){charmyflag2_2;

ynchronized(thi){________________;}

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

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

Sytem.out.println(myflag2_2+”Loop”);}catch(InterruptedE某ceptionie){

Sytem.out.prinfln(ie);}}

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

}

finalprivateintrand(intlow,inthigh){

return(________________);

}}

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

publicclaTet4implementRunnable{

charcharArray[]=newchar[26];publicTet4(){for(inti=0;i

publicvoidrun(){

try

{for(inti=0;i

//休眠一秒钟Sytem.out.print(charArray[i]);}}

catch(InterruptedE某ceptione){

e.printStackTrace();}}

publictaticvoidmain(Stringarg[]){

Threadt=//实例化线程对象//启动线程}}

三、判断题

1、启动多线程必须调用tart()方法,如果调用run方法则没有启动新的线程()2、run方法是运行线程的主体,若run方法运行结束,线程就消亡了。

()3、线程可以用yield使同优先级的线程运行。

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

()5、一个线程创建并启动后,它将执行自己的run()方法。

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

()

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

()

四、简答题

1、阅读下面的程序,修改程序中错误的地方:

1.publicclaTetimplementRunnable{2.Stringtr[]=newString[10];

3.for(inti=0;i

6.publicvoidrun(){7.try{

8.for(inti=0;i

10.Sytem.out.print(tr[i]);11.}

12.}catch(InterruptedE某ceptione){13.e.printStackTrace();14.}15.}

16.publictaticvoidmain(Stringarg[]){17.Tett=newTet();18.t.run();19.}20.}

2、请说出你所知道的线程同步的方法。

3、leep()和wait()有什么区别

4、启动一个线程是用run()还是tart()5、当一个线程进入一个对象的一个ynchronized方法后,其它线程是否可进入此对象的其它方法

6、多线程有几种实现方法,都是什么同步有几种实现方法,都是什么

7、线程的基本概念、线程的基本状态以及状态之间的关系

8、线程的同步、如何实现线程的同步

9、同步和异步有何异同,在什么情况下分别使用他们?

举例说明。

10、什么是死锁

11、什么是线程饿死,什么是活锁?

12、解释实现多线程的几种方法

Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。

13、Thread.tart()与Thread.run()有什么区别?

14、为什么需要run()和tart()方法,我们可以只用run()方法来完成任务吗?

15、什么是ThreadLocal类,怎么使用它?

16.在静态方法上使用同步时会发生什么事?

17、使用java语言如何创建线程对象?

请列出常用的两种方法。

18、线程之间通信的方法有哪几个?

分别起到什么作用?

四、编程题

1、应用Java中线程的概念,编写一个Java程序(包括一个主程序类,一个Thread类的子类)。

在主程序中创建2个线程(用子类),将其中一个线程的优先级设为

10,另一个线程的优先级设为6。

让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。

(提示:

设置线程优先级用etPriority方法)

2、假设一个银行的ATM机,它可以允许用户存款也可以取款。

现在一个账户上有存款200元,用户A和用户B都拥有在这个账户上存款和取款的权利。

用户A将存入100元,而用户B将取出50元,那么最后账户的存款应是250元。

实际操作过程如下:

(1)先进行A的存款操作:

1)得到账户的存款数额200,耗时2。

2)将账户数额增加100,耗时忽略不计

3)将新生成的账户结果300返回到ATM机的服务器上,耗时2

(2)再进行B的取款操作:

4)得到增加后账户存款数额300,耗时2。

5)判断取款额是否小于账户余额,若是,则将账户数额减少50,否则抛出异常信息,

耗时忽略不计。

6)将新生成的账户结果250返回到ATM机的服务器上,耗时2。

请根据以上要求,将A的操作和B的操作分别用线程来表示,编写一个Java程序实现该功能。

3、请编写一个类,类名为SubThread,是Thread类的子类。

该类中定义了含一个字符串参数的构造方法和run()方法,方法中有一个for循环,循环一共进行5次,循环体先在命令行显示该线程循环了第几次,然后随机休眠小于一秒的时间,循环结束后显示线程结束信息:

线程名+finihed编写一个

Application程序,并在其中创建SubThread类的三个线程对象T1,T2,T3,他们的名称分别为Frit,Second,Third,并启动这三个线程

4、请编写一个类,类名为MulThread,定义含一个字符串的构造方法,并实现

Runnable接口,接口中的run()方法如下实现:

方法先在命令行显示该线程信息,然后随机休眠小于一秒的时间,最后显示线程结束信息:

finihed+线程名。

编写一个Application程序,在其中通过Runnable创建MUlThread类的三个线程对象T1,T2,T3,并启动这三个线程。

5、假设某家银行可接受顾客的汇款,每进行一步汇款,便可计算出汇款总额。

现有两名顾客,每人都分3次.每次100元将钱汇入。

试编写一个程序,来模拟顾客的汇款操作。

6、利用多线程求解某范围素数,每个线程负责1000范围:

线程1找1-1000;线程2找1001-2000;线程3找2001-3000。

编程程序将每个线程找到的素数及时打印。

7、应用Java中线程的概念,编写一个Java程序(包括一个主程序类,一个Thread类的子类)。

在主程序中创建2个线程(用子类),将其中一个线程的优先级设为10,另一个线程的优先级设为6。

让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。

(提示:

设置线程优先级用etPriority方法)

8、编写一个程序,扫描本机的小于5000的端口,显示正在使用的端口号。

要求采用5个线程实现,每个线程扫描1000个端口。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1