黑马程序员技术交流社区

标题: 求大神解析这道多线程题目 [打印本页]

作者: jialp1024    时间: 2016-6-1 17:37
标题: 求大神解析这道多线程题目
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.代码不会完成

作者: 土菠萝    时间: 2016-6-1 18:05
这是一个好题目!
作者: zhuoxu    时间: 2016-6-1 18:24
选择BF

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2