黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 思考。。。    时间: 2015-6-29 16:00
标题: 多线程问题
  1. public synchronized void set(String name)
  2.         {
  3.                 while(flag)
  4.                         try{this.wait();}catch(Exception e){}//t1(放弃资格)  t2(获取资格)
  5.                 this.name = name+"--"+count++;

  6.                 System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
  7.                 flag = true;
  8.                 this.notifyAll();
  9.         }


  10.         //  t3   t4  
  11.         public synchronized void out()
  12.         {
  13.                 while(!flag)
  14.                         try{wait();}catch(Exception e){}//t3(放弃资格) t4(放弃资格)
  15.                 System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);
  16.                 flag = false;
  17.                 this.notifyAll();
  18.         }
复制代码

如上代码,我想请问的是,如果用notifyAll()唤醒所有的线程,那么线程t3,t4一起被唤醒了,那么还是会存在连续两次打印输出System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name)的情况吧,为什么?
作者: qxc1281    时间: 2015-6-30 08:17
你不是有标志变量吗,他也控制线程的
作者: 思考。。。    时间: 2015-6-30 11:09
qxc1281 发表于 2015-6-30 08:17
你不是有标志变量吗,他也控制线程的

是有标志变量flag了,但是那时的标志变量是true了,所以我在想t3,t4线程都被唤醒后,它们都有可能一起往下执行了,那就有可能出现连续两次打印输出System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name)的情况,这是我的理解,还是想不通呢




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