当前位置:  技术问答>java相关

检验你的SCJP能力!!!来自SUN的SCJP题库中的一道经典线程题目,你能做出正确的答案吗???

    来源: 互联网  发布时间:2015-03-30

    本文导语:  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....

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();
你认为正确答案是哪个?为什么?请详细的讲解一下!谢谢!

|
楼上的老大,不要陆续公布啊,能不能一次性全发出来啊?

我的email

javor@21cn.com

|
正确答案是C
解释:AB是不可能的,不须解释。
C:join方法是等待该进程死亡,符合题目要求,也就是线程t死亡后主线程才能继续执行,此时可以保证i已经是10。
D:使该进程暂停,明显不符合。
E:唤醒等待当前对象的其它线程。不符合。
F:同E
G:打断此线程,打断的结果导致i=10的赋值语句不能被执行。

|
题目是要确保j=10,就是只有线程运行完成(退出run()方法),才可以肯定j=a.i=10,所以,根据Thread的API文档,应该选c,
join 
 public final void join() throws InterruptedException
等待线程死亡。 
其他都不能保证j=a.i在i=10后运行

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 初学者这样检验自己的学习效果呢?
  • Java邮件检验库 JEmval
  • JB中是否有现成的文本检验组件?
  • MD5检验码的作用?
  • 基于bootstrap的检验组件 bt-validate
  • jquery检验实例-改变错误提示信息的位置
  • 如何检验Java虚拟机是否存在??? 谢谢 在线求答!!!
  • Oracle释出Linux资料完整检验开放源码
  • 中文用户名的js检验正则
  • 检验SQL Server备份的脚本
  • 检验表单的checkbox是否选择,怎么不行?错在哪里?看里面的代码
  • IP检验和问题请教。。。
  • unix/linux知识 iis7站长之家
  • 有没有根据schema文件检验xml文档的java包或方法??
  • sql server全角字符与半角字符的检验
  • jquery检验用户是否已注册的实例代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3