检验你的SCJP能力!!!来自SUN的SCJP题库中的一道经典线程题目,你能做出正确的答案吗???
class A implements Runnable{
int i;
public void run(){
try{
Thread.sleep(50000);
i=10;
}catch(InterruptedException e){}
}
}
public class Test{
public static void main(String a[]){
try{
A a = new A();
Thread t = new Thread(a);
t.start();
//line 17
int j=a.i;
}catch(Exception e){}
}
}
Which statement at line 17 will ensure that j=10 at line 19?
A. a.wait();
B. t.wait();
C. t.join();
D. t.yield();
E. t.notify();
F. a.notify();
G. t.interrupt();
你认为正确答案是哪个?为什么?请详细的讲解一下!谢谢!
问题点数:20、回复次数:21Top
1 楼chl326(希望你是java高手 拯救我于水火之中)回复于 2001-12-30 12:37:14 得分 0
c eTop
2 楼linkguic(rake)回复于 2001-12-30 12:49:24 得分 0
好厉害,notify应该不是static的.所以t一定要run才能call ,是这样么?Top
3 楼chl326(希望你是java高手 拯救我于水火之中)回复于 2001-12-30 12:58:46 得分 0
等待高手回答。。。。。。。。。。。。。。。。Top
4 楼chl326(希望你是java高手 拯救我于水火之中)回复于 2001-12-30 12:59:43 得分 0
正确答案是那个
?Top
5 楼Patrick_DK(我有我的调调,就是这么屌)回复于 2001-12-30 13:23:19 得分 0
不明白,关注
我觉得B和E是肯定错的,好像wait()和notify()是对对象而言的吧Top
6 楼reki(i feel love fly!)回复于 2001-12-30 14:04:58 得分 0
就是c,我考scjp的时候就遇到了这道题!Top
7 楼shining_ljr(老荣)回复于 2001-12-30 14:21:22 得分 0
eTop
8 楼congling(congling)回复于 2001-12-30 15:53:22 得分 0
应该是c,因为join是等待线程死亡并回收线程资源Top
9 楼tommycat(灵狐秋水)回复于 2001-12-30 16:00:19 得分 0
看来对线程还一点概念都没有呢Top
10 楼Patrick_DK(我有我的调调,就是这么屌)回复于 2001-12-30 16:13:31 得分 0
E应该是错的
看书的时候好像没有怎么看到join(),谁解释一下啊?Top
11 楼dlight(阿贞)回复于 2001-12-30 16:17:18 得分 0
声明一下:我对于线程等等一窍不通。
不明白。如果int j=a.i;
这句话会不会也同时引起一个线程?如果是这样,那么thread.sleep(50000)会引起那个线程的休眠?t还是a?糊涂糊涂。我被线程搞糊涂了。
Top
12 楼arlixin(木子)回复于 2001-12-30 16:25:52 得分 0
此题选c,大家可以去查一下文档。Top
13 楼dlight(阿贞)回复于 2001-12-30 16:30:36 得分 0
什么文档?Top
14 楼gnzhao(gnzhao)回复于 2001-12-30 16:39:33 得分 0
cTop
15 楼cherami(cherami)回复于 2001-12-30 16:40:44 得分 5
正确答案是C
解释:AB是不可能的,不须解释。
C:join方法是等待该进程死亡,符合题目要求,也就是线程t死亡后主线程才能继续执行,此时可以保证i已经是10。
D:使该进程暂停,明显不符合。
E:唤醒等待当前对象的其它线程。不符合。
F:同E
G:打断此线程,打断的结果导致i=10的赋值语句不能被执行。Top
16 楼wangtaoyy(flow)回复于 2001-12-30 16:45:19 得分 0
cTop
17 楼ycats(加菲猫)回复于 2001-12-30 16:52:22 得分 5
题目是要确保j=10,就是只有线程运行完成(退出run()方法),才可以肯定j=a.i=10,所以,根据Thread的API文档,应该选c,
join
public final void join() throws InterruptedException
等待线程死亡。
其他都不能保证j=a.i在i=10后运行Top
18 楼pensincun(天高任彭翔)回复于 2001-12-30 17:06:36 得分 0
看来大家的热情听高涨的,我很兴奋!
谢谢大家!
我公布正确的答案是:C!!!
这的确是SCJP题库中的一道题目!
cherami(cherami)的解释很详细了!
Thread可是SCJP考察的重点,大家可不能掉以轻心啊!!!
BTW:reki(i feel love fly!) 请问阁下考了多少啊?
我以后将陆续公布SCJP的题库的,请准备拿下SCJP的同仁门予以密切关注!!!Top
19 楼Patrick_DK(我有我的调调,就是这么屌)回复于 2001-12-30 18:32:51 得分 10
楼上的老大,不要陆续公布啊,能不能一次性全发出来啊?
我的email
javor@21cn.comTop
20 楼yuanqingfei(必定伟大)回复于 2002-01-13 18:42:33 得分 0
sadfTop
21 楼pensincun(天高任彭翔)回复于 2002-02-04 16:52:40 得分 0
结帐了!Top




