黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
思考。。。
时间:
2015-6-29 16:00
标题:
多线程问题
public synchronized void set(String name)
{
while(flag)
try{this.wait();}catch(Exception e){}//t1(放弃资格) t2(获取资格)
this.name = name+"--"+count++;
System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
flag = true;
this.notifyAll();
}
// t3 t4
public synchronized void out()
{
while(!flag)
try{wait();}catch(Exception e){}//t3(放弃资格) t4(放弃资格)
System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);
flag = false;
this.notifyAll();
}
复制代码
如上代码,我想请问的是,如果用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