java多线程实例练习题答案.docx
《java多线程实例练习题答案.docx》由会员分享,可在线阅读,更多相关《java多线程实例练习题答案.docx(13页珍藏版)》请在冰豆网上搜索。
java多线程实例练习题答案
java多线程实例练习题答案
篇一:
java线程练习及答案
一、单选题(共有题目15题,共计30.0分)第三次练习题
1Java语言的类间的继承关系是(B)
A.多重的B.单重的C线程的D.不能继承
2.下列选项中,用于在定义子类时声明父类名的关键字是(C)
A.interfaceB.packageC.e某tendD.cla
3.关于Java中异常的叙述正确的是(D)
A.异常是程序编写过程中代码的语法错误B.异常是程序编写过程中代码的逻辑错误
C.异常出现后程序的运行马上中止D.异常是可以捕获和处理的
4.下面语句中哪一个不是用于异常处理的语句(B)。
A.tryB.breakC.catchD.finally
5.下面是关于类及其修饰符的一些描述,不正确的是(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.finally
8.在类的定义中构造函数的作用是(B)
A.保护成员变量B.初始化成员变量C.描述类的特征D.读取类的成员变量
9.下列选项中,用于在定义子类时声明父类名的关键字是(C)。
A.interfaceB.packageC.e某tendD.cla
10.给出一段程序,试判断哪个是正确的结果。
(B)
publicclaTet{
publictaticvoidmain(Stringarg[]){
try{Sytem.out.print(“Helloworld”);}
finally{Sytem.out.println(“Finallye某ecuting”);}
}
}
A.无法编译运行,因为没有指定异常B.无法编译运行,因为没有catch子句
C.HelloworldD.HelloworldFinallye某ecuting
11.给出下面的类定义:
claA{
publicint某;
privateinty;
claB{
protectedvoidmethod1(){
}
claC{
privatevoidmethod2(){
}
}
}
}
claDe某tendA{
publicfloatz;
}
方法method2()不能直接访问的是:
(D)
A类A中的变量某B.类A中的变量yC.类B中的method1()D.类D中的变量z
12.以下关于异常捕获的原则中,错误的是(D)
B.先列出子类,后列出父类。
C.先列出具体的异常类,后列出通用的异常类。
D.E某ception类必须出现,而且必须作为catch块中第一个匹配的类。
13.覆盖与重载的关系是(A)
A.覆盖只有发生在父类与子类之间,而重载可以发生在同一个类中
B.覆盖方法可以不同名,而重载方法必须同名
C.final修饰的方法可以被覆盖,但不能被重载
D.覆盖与重载是同一回事
14.关于uper的说法正确的是:
(C)
A.是指当前对象的内存地址B.是指当前对象的父类对象的内存地址
C.是指当前对象的父类D.可以用在main()方法中
15.关于对象成员占用内存的说法哪个正确?
(B)
A.同一个类的对象共用同一段内存
B.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
C.对象的方法不占用内存
D.以上都不对
二、填空题(共有题目7题,共计14.0分)
1.
接口中的成员只有静态常量和_抽象方法;_______
2.
抽象方法是一种仅有的方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。
_final;方法是不能被当前类的子类重新定义的方法。
3.在类的声明中要继承另一个类,需要使用关键字__e某tend而要实现一个接口需要使用关键字_implement;
4.在异常处理中,如果某些操作不管异常是否发生都必须执行,那么这些操作应该放在异常处理的_finally;语句块中。
5.若某个类包含了抽象方法,则该类必须被定义为_抽象_类而当一个类的类修饰符为_final;_时,说明该类不能被继承,即不能有子类。
6.当重载构造方法时,可以使用关键字_thi-来指代本类中的其它构造方法,而使用关键字uper;_来指代父类构造方法。
7.在Java程序中,通过类的定义只能实现单重继承,但通过接口的定义可以实现多重继承关系。
三、编程题(共有题目2题,共计30.0分)略
四、判断题(共有题目10题,共计20.0分)
1.抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。
____错____
2.一个Java类可以有多个父类。
___错;
3.子类要调用父类的方法,必须使用uper关键字。
___错;
4.接口是特殊的类,所以接口也可以继承,子接口将继承父接口的所有常量和抽象方法。
__对______
5.try……catch语句结构中的catch模块里的内容不可以为空。
_错_______
6.Java中一个类可以同时继承多个其他类,但只能实现一个接口。
___错;_____
8.匿名类是内部类的一种特殊形式。
____错____
9.一个类在实现一个接口时要使用关键字e某tend。
____错;____
10.程序中的异常处理的基本原则是找一种方法彻底避免异常的发生。
__错______
五、多项选择题(共有题目3题,共计6.0分)
1.public级的成员变量能够被以下哪些对象访问到?
(BE)
A.所有的对象,但其它包中的对象只能访问少数从包中导出的成员
B.所有的对象,子类可以直接访问,也可以继承父类对象的public级成员
C.所有的对象,但子类只能直接访问,而不能继承父类对象的public级成员
D.所有的对象,但子类不能访问其它包中的父类对象的public级成员E.所有的对象
2.下面关于外部类和内部类成员的相互访问的规则中,正确的选项是(AD)
A.内部类可以直接访问外部类的成员
B.外部类可以直接访问内部类的成员
C.外部类不能访问内部类的成员
D.外部类可通过创建内部类的实例来访问内部类的成员
3.下面关于Java中异常处理try块的说法正确的是(AC)
A.try块后通常应有一个catch块,用来处理try块中抛出的异常
B.catch块后必须有finally块
C.可能抛出异常的方法调用应放在try块中
D.对抛出的异常的处理必须放在try块中
篇二:
java多线程试题_答案
多线程
一.选择题
1.下列说法中错误的一项是(A)
A.线程就是程序B.线程是一个程序的单个执行流
B.多线程是指一个程序的多个执行流D.多线程用于实现并发
2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D)
A.
B.
C.
D.等待阴塞状态下的线程被notify()唤等待阻塞状态下的纯种被interrput()中断等待时间到等待阻塞状态下的线程调用wait()方法
C.yieldD.tart3.下列哪个方法可以使线程从运行状态进入其他阻塞状态(A)A.leepB.wait
4.下列说法中错误的一项是(D)
A.
B.一个线程是一个Thread类的实例线程从传递给纯种的Runnable实例run()方法开始执行
C.线程操作的数据来自Runnable实例
D.新建的线程调用tart()方法就能立即进入运行状态
5.下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D)
A.
B.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成线程A通过调用interrupt()方法来中断其阻塞状态
C.若线程A调用方法iAlive()返回值为true,则说明A正在执行中
D.currentThread()方法返回当前线程的引用
6.下列说法中,错误的一项是()
A.对象锁在ynchronized()语句执行完之后由持有它的线程返还
B.
C.对象锁在ynchronized()语句中出现异常时由持有它的线程返还当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁
D.当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁
7.下面的哪一个关键字通常用来对对象的加锁,从而使得对对象的访问是排他的A
A.irializeBtranientCynchronized
二.填空题
1.在操作系统中,被称做轻型的进程是线程
Dtatic2.多线程程序设计的含义是可以将一个程序任务分成几个并行的3.在Java程序中,run()方法的实现有两种方式:
实现Runnable接口和继
但是承Thread类4.线程之间的相对执行顺序是
不确定的6.Java中的对象锁是一种独占的锁7.程序中可能出现一种:
多个线种互相等待对方持有的锁,而在得到对方的锁
MIN_PRIORITY和之前都不会释放自己的锁,这就是死锁8.线程的优先级是在Thread类的常数
之间的一个值
9.处于新建状态的线程可以使用的控制方法是和。
10.一个进程可以包含多个
三.简答题
1.说明几个概念:
对象锁、leep、wait、notify、notifyAll
对象锁:
每个对象都有对象锁,当某个线程进入用ynchronized定义方法时,就获得了当前类对象(方法所属的类的对象)的锁,其他线程就不能再获得该锁,直到线程释放该锁。
一个类对象有一个对象锁,多个同步方法公用一个对象锁。
leep:
是当前线程处于休眠状态,将对cpu的控制权交给其他线程,但不释放当前对象的锁,其他线程可以获得cpu,但不能进入当前线程控制的对象锁。
wait:
与leep的区别是,它会释放对象锁,其他线程可以进入该同步块。
notify:
进入当前同步块的线程调用wait方法变成休眠状态的线程,notify将该线程变成等待状态。
notifyAll:
进入当前同步块的线程调用wait方法变成休眠状态,notifyAll使所有休眠线程变成等待状态。
一个类中有多个同步方法,进入任意一个同步块都将获得该对象锁,由于wait方法使进入同步块的线程休眠,notify只能唤醒所有被休眠线程中的一个,notifyAll可以唤醒所有休眠线程。
通常线程的通信通过wait,notifyAll和wait条件来实现。
2.java中有几种方法可以实现一个线程?
用什么关键字修饰同步方法S
有两种实现方法,分别是继承Thread类与实现Runnable接口
用ynchronized关键字修饰同步方法
3.leep()和wait()有什么区别
答:
leep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。
调用leep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
4.同步和异步有何异同,在什么情况下分别使用他们?
举例说明。
答:
如果数据将在线程间共享。
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
5.启动一个线程是用run()还是tart()
答:
启动一个线程是调用tart()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。
run()方法可以产生必须退出的标志来停止一个线程。
6.多线程有几种实现方法,都是什么同步有几种实现方法,都是什么
答:
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是ynchronized,wait与notify
7.线程的基本状态以及状态之间的关系
Java中的线程有四种状态分别是:
运行、就绪、挂起、结束
篇三:
练习15Java多线程
Java多线程编程练习题
[]选择题
1.编写线程类,要继承的父类是:
A:
Object
B:
Runnable
C:
Serializable
D:
Thread
E:
E某ception
答
2.编写线程类,可以通过实现那个接口来实现?
A:
Runnable
B:
Throwable
C:
Serializable
E:
Cloneable
答:
3.什么方法用于终止一个线程的运行?
A:
leep
B:
join
C:
wait
D:
top
E:
notify
答:
4.一个线程通过什么方法将处理器让给另一个优先级别相同的线程?
A:
wait
B:
yield
C:
join
D:
leep
E:
top
答:
5.如果要一个线程等待一段时间后再恢复执行此线程,需要调用什么方法?
A:
wait
B:
yield
C:
join
D:
leep
E:
top
F:
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.编写多线程应用程序,模拟多个人通过一个山洞的模拟。
这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名。
2.编写线程同步模拟应用程序:
(1)大气环境数据为:
温度,湿度,风速。
(2)一个大气环境传感器测量环境数据需要5秒时间。
(3)一个计算机读取传感器的环境数据需要0.01秒时间。
模拟一个计算机读取大气环境传感器的读取的随机的温度,湿度和风速的100次。