A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jialp1024 中级黑马   /  2016-6-1 17:37  /  561 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.  class Waiting implements Runnable  {
     2.    boolean flag=false;
     3.public  synchronized void run()  {
     4.    if  (flag)  {
     5.    flag=false;
     6.System.out.print ("1");
     7.    try  {  this.wait();  )  catch  (Exception e)  {  }
     8.System.out.print ("2");
     9.    }
     10.    else  {
     11.    flag=true;
     12.    System.out.print ("3");
     13.    try{Thread.sleep (2000); } catch(Exception e)  {}
     14.    System.out.print ("4");
     15.    notify();
     16.    }
     17.    }
     18.    public static void main (String  []  args)  {
     19.    Waiting w=new Waiting();
     20.    new Thread (w) .start();
     21.    new Thread (w) .start();
     22.    }
     23.  }
     以下哪两项是止确的?(选两项)
     A.代码输出l 3 4
     B.代码输出3 4 1
     C.代码输出l 2 3 4
     D。代码输出1 3 4 2
     E.代码运行完毕
     F.代码不会完成

2 个回复

倒序浏览
这是一个好题目!
回复 使用道具 举报
选择BF

两条线程运行,其中一条进入同步的run方法,由于flag初始化值为false,走else,flag被赋值ture,然后打印3,睡两秒,再打印4,此时并无线程执行wait方法,notify方法无效,第一条线程的run方法执行完毕.紧接着另一条线程进来,此时的flag已被赋值true,执行if中的代码,打印1,然后执行wait方法,进入睡眠状态,虽然释放锁,但是由于另一条线程已执行完毕,所以当前线程一直处于睡眠状态无法被唤醒,程序一直处于运行状态
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马