Java多线程习题Word文件下载.doc
- 文档编号:6860736
- 上传时间:2023-05-07
- 格式:DOC
- 页数:8
- 大小:77.50KB
Java多线程习题Word文件下载.doc
《Java多线程习题Word文件下载.doc》由会员分享,可在线阅读,更多相关《Java多线程习题Word文件下载.doc(8页珍藏版)》请在冰点文库上搜索。
4、有关线程的叙述正确的有:
()
A.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。
B.可以获得对任何对象的互斥锁定。
C.线程通过调用对象的synchronized方法可取得对象的互斥锁定。
D.线程调度算法是平台独立的。
5、以下哪个是线程类的方法?
A.yield()
B.sleep(longmsec)
C.go()
D.stop()
6、以下哪个最准确描述synchronized关键字?
A.允许两线程并行运行,而且互相通信;
B.保证在某时刻只有一个线程可访问方法或对象;
C.保证允许两个或更多处理同时开始和结束;
D.保证两个或更多线程同时开始和结束。
7、于Java语言的内存回收机制,下列选项中最正确的一项是()。
A、Java程序要求用户必须手工创建一个线程来释放内存
B、Java程序允许用户使用指针来释放内存
C、内存回收线程负责释放无用内存
D、内存回收线程不能释放内存对象
8、下列哪一个类实现了线程组?
A、java.lang.ObjictB、java.1ang.ThreadGroup
C、Java.1ang.ThreadD、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、运行下列程序,会产生什么结果()
publicclassXextendsThreadimplementsRunable{
publicvoidrun(){
System.out.println("
thisisrun()"
);
}
publicstaticvoidmain(Stringargs[])
{
Threadt=newThread(newX());
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、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,填写划线部分的语句或注释,并写出程序执行结果。
publicclassMyAdd{//继承线程类
staticinttotal=10;
intn;
publicMyAdd(intn){
this.n=n;
publicvoidrun(){
try{
sleep(n);
//含义是:
total=total+n;
System.out.println(total);
catch(Exceptione){
System.out.println(“EXCEPTION!
”);
}
publicstaticvoidmain(String[]args)
{
MyAddt1=newMyAdd(3000);
;
//启动线程t1
}
12、请完成下列Java程序:
运行3个线程,每一个线程有自己的标志,用a,b,c表示,每个线程显示一个”Start”信息和一个”End”信息并且间隔地显示2个“Loop”信息(间隔变化为(0.5~2)秒之间的随机延迟)。
程序运行结果如下:
(注:
由于时间间隔为随机数,所以,运行结果的顺序不惟一)
aStart
bStart
cStart
bLoop
aLoop
bEnd
cLoop
aEnd
cEnd
注意:
请勿改动main()主方法和其他已有语句内容,仅在下划线处填放适当的语句。
Publicclassex2_2implementsRunnable{
staticcharflag2_2=’a’;
publicstaticvoidmain(String[]arg){
ex2_2obj2_2=newex2_2();
Threadthread2_2=newThread(obj2_2);
thread2_2.start();
thread2_2=newThread(obj2_2);
thread2_2=new‘Thread(obj2_2);
publicvoidrun(){
charmyflag2_2;
synchronized(this){
________________;
}
System.out.println(myflag2_2+”Start”);
for(inti=0;
i<
2;
i++){
try{
Thread.sleep(rand(500,2000));
System.out.println(myflag2_2+”Loop”);
}catch(InterruptedExceptionie){
System.out.prinfln(ie);
System.out.println(myflag2_2+”End”);
finalprivateintrand(intlow,inthigh){
return(________________);
13、下面的程序利用线程输出从a到z的26个字母,每隔一秒钟输出一个字母,程序不完整,请阅读程序代码,根据注释要求在划线处补充完成代码。
publicclassTest4implementsRunnable
{
charcharArray[]=newchar[26];
publicTest4()
{
for(inti=0;
i<
charArray.length;
i++)
{
charArray[i]=(char)(i+'
a'
}
publicvoidrun()
try
{
for(inti=0;
charArray.length;
i++)
{
//休眠一秒钟
System.out.print(charArray[i]);
}
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
publicstaticvoidmain(Stringargs[])
Threadt=//实例化线程对象
//启动线程
三、判断题
1、启动多线程必须调用start()方法, 如果调用run方法则没有启动新的线程。
2、run方法是运行线程的主体,若run方法运行结束,线程就消亡了。
()
3、线程可以用yield使同优先级的线程运行。
()
4、要在程序中实现多线程,必须在源程序前面使用import语句显示的导入Thread类。
5、一个线程创建并启动后,它将执行自己的run()方法。
()
6、线程可以用yield方法使较低优先级的线程运行。
()
7、每个Java线程的优先级都设置在常数1~12之间,默认的优先级设置为常数6。
四、简答题
1、阅读下面的程序,修改程序中错误的地方:
1.publicclassTestimplementsRunnable{
2.Stringstr[]=newString[10];
3.for(inti=0;
str.length();
i++){
4.str[i]=i+”-”;
5.}
6.publicvoidrun(){
7.try{
8.for(inti=0;
9.sleep(1000);
10.System.out.print(str[i]);
11.}
12.}catch(InterruptedExceptione){
13.e.printStackTrace();
14.}
15.}
16.publicstaticvoidmain(Stringargs[]){
17.Testt=newTest();
18.t.run();
19.}
20.}
2、请说出你所知道的线程同步的方法。
3、sleep()和wait()有什么区别?
4、启动一个线程是用run()还是start()?
5、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
6、多线程有几种实现方法,都是什么?
同步有几种实现方法,都是什么?
7、线程的基本概念、线程的基本状态以及状态之间的关系
8、线程的同步、如何实现线程的同步
9、同步和异步有何异同,在什么情况下分别使用他们?
举例说明。
10、什么是死锁
11、什么是线程饿死,什么是活锁?
12、解释实现多线程的几种方法?
Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。
13、Thread.start()与Thread.run()有什么区别?
14、为什么需要run()和start()方法,我们可以只用run()方法来完成任务吗?
15、什么是ThreadLocal类,怎么使用它?
16.在静态方法上使用同步时会发生什么事?
17、使用java语言如何创建线程对象?
请列出常用的两种方法。
18、线程之间通信的方法有哪几个?
分别起到什么作用?
四、编程题
1、应用Java中线程的概念,编写一个Java程序(包括一个主程序类,一个Thread
类的子类)。
在主程序中创建2个线程(用子类),将其中一个线程的优先级设为
10,另一个线程的优先级设为6。
让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。
(提示:
设置线程
优先级用setPriority方法)
2、假设一个银行的ATM机,它可以允许用户存款也可以取款。
现在一个账户上有存款200元,用户A和用户B都拥有在这个账户上存款和取款的权利。
用户A将存入100元,而用户B将取出50元,那么最后账户的存款应是250元。
实际操作过程如下:
(1)先进行A的存款操作:
1)得到账户的存款数额200,耗时2s。
2)将账户数额增加100,耗时忽略不计
3)将新生成的账户结果300返回到ATM机的服务器上,耗时2s
(2)再进行B的取款操作:
4)得到增加后账户存款数额300,耗时2s。
5)判断取款额是否小于账户余额,若是,则将账户数额减少50,否则抛出异常信息,耗时忽略不计。
6)将新生成的账户结果250返回到ATM机的服务器上,耗时2s。
请根据以上要求,将A的操作和B的操作分别用线程来表示,编写一个Java程序实现该功能。
3、请编写一个类,类名为SubThread,是Thread类的子类。
该类中定义了
含一个字符串参数的构造方法和run()方法,方法中有一个for循环,循环一共
进行5次,循环体先在命令行显示该线程循环了第几次,然后随机休眠小于一秒
的时间,循环结束后显示线程结束信息:
线程名+finished。
编写一个
Application程序,并在其中创建SubThread类的三个线程对象T1,T2,T3,
他们的名称分别为Frist,Second,Third,并启动这三个线程
4、请编写一个类,类名为MulThread,定义含一个字符串的构造方法,并实现
Runnable接口,接口中的run()方法如下实现:
方法先在命令行显示该线程信息,
然后随机休眠小于一秒的时间,最后显示线程结束信息:
finished+线程名。
编
写一个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正在运行”。
设置线程优先级用setPriority方法)
8、编写一个程序,扫描本机的小于5000的端口,显示正在使用的端口号。
要求采用5个线程实现,每个线程扫描1000个端口。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 多线程 习题