当前位置:文档之家› java多线程面试题

java多线程面试题

java多线程面试题
1.什么是多线程编程?什么时候使用?
多线程一般用于当一个程序需要同时做一个以上的任务。

多线程通常用于GUI交互程序。

一个新的线程被创建做一些耗时的工作,当主线程保持界面与用户的交互。

2.为什么wait(),notify()和notifyall()函数定义在Object类里面?
因为所有类都是继承于Object类,这样所有类就可以简单的进行多线程编程了。

3.wait()方法和sleep()方法有什么不同?
sleep()方法执行后仍然拥有线程,只是延时。

而wait方法放弃了线程控制,其它线程可以运行,想要再次运行是要重新开始。

4.Thread和Runnable有什么不同?
JA V A线程控制着程序执行的主路径。

当你用java命令调用JVM时,JVM创建了一个隐式线程来执行main方法。

Thread类提供了主线程调用其它线程并行运行的机制。

Runnable接口定义了一个能被Thread运行的类。

实现Runnable的类只需要实行run方法。

可以很灵活的扩展现在的已经继承自其它父类的类。

而thread则不可以,因为java 只允许继承一个父类。

Runnable可以共享数据,Thread是一个类,而Runnable是一个接口
5.我可以重载start()方法么?
可以重载,重载后还要重载run()方法,
9.编译运行下面的代码会发生什么?
1.public class Bground extends Thread{
2.public static void main(String
argv[])
3.{
4. Bground b = new Bground();
5. b.run();
6.}
7.public void start()
9.for(int i = 0; i <10; i++){
10.System.out.println("Value of
i = " + i);
11.}
12.}
13.}
A.编译错误,Thread类中的run方法没有定义
B.运行时错误,Thread类中的run方法没有定义
C.编译无错,打印0到9.
D.编译无错,不打印任何值
10.关于下面一段代码,哪些描述是正确的
1.public class Agg {
2.public static void main(String
argv[]){
3. Agg a = new Agg();
4. a.go();
5.}
6.
7.public void go(){
8. DSRoss ds1 = new DSRoss("one");
9. ds1.start();
11.}
12.
13.class DSRoss extends Thread{
14.private String sTname = "";
15.
16. DSRoss(String s){
17. sTname = s;
18.}
19.
20.public void run(){
21. notwait();
22.System.out.println("finished")
;
23.}
24.
25.public void notwait(){
26.while(true){
27.try{
28.System.out.println("wai
ting");
29. wait();
30.}catch
(InterruptedException ie){
31.}
32.System.out.println(sTname)
;
33. notifyAll();
34.}
35.}
36.}
A.编译错误
B.能够编译,输出“waiting"
C.能够编译, 输出“waiting",紧接着输出"finish"
D.运行时错误,会抛异常
11.编译运行下面的代码会发生什么
1.public class Test extends Thread{
2.private String sThreadName;
3.
4.public static void main(String
argv[]){
5. Test h = new Test();
6. h.go();
7.}
8.
9. Test(){
10.}
11.
12. Test(String s){
13. sThreadName = s;
14.}
15.
16.public String getThreadName(){
17.return sThreadName;
18.}
19.
20.public void go(){
21. Test first = new Test("first");
22. first.start();
23. Test second = new
Test("second");
24. second.start();
25.}
26.
27.public void start(){
28.for(int i = 0; i <2; i++){
29.System.out.println(getThre
adName() + i);
30.try{
31.Thread.sleep(100);
32.}catch
(InterruptedException e){
33.System.out.println(e.ge
tMessage());
34.}
35.}
36.}
37.}
A.编译错误
B.输出first0, second0, first1, second1.
C.输出first0, first1, second0, second1.
D.运行时错误
12.编译运行下面的代码会发生什么
1.public class Test {
2.public static void main(String
argv[]){
3. Pmcraven pm1 = new
Pmcraven("one");
4. pm1.run();
5. Pmcraven pm2 = new
Pmcraven("two");
6. pm2.run();
7.}
8.}
9.
10.class Pmcraven extends Thread{
11.private String sTname = "";
12.
13. Pmcraven(String s){
14. sTname = s;
15.}
16.
17.public void run(){
18.for(int i = 0; i <2; i++){
19.try{
20. sleep(1000);
21.}catch
(InterruptedException e){
22.}
23. yield();
24.System.out.println(sTname)
;
25.}
26.}
27.}
A.编译错误
B.输出One One Two Two
C.输出One Two One Two
D.输出One Two One Two。

相关主题