黑马程序员技术交流社区
标题:
多线程通信--同步函数的疑问
[打印本页]
作者:
张海涛
时间:
2013-1-18 08:27
标题:
多线程通信--同步函数的疑问
本帖最后由 张海涛 于 2013-1-19 16:44 编辑
class Resource { private String name; private int count=1; private boolean flag=false; public synchronized void set(String name) //第12天视频中生产者,消费者问题的代码。 出现生产多个产品,才消费一个产品的问题。 { //老毕说:例子中有 t1,t2两个生产者,当t1进来后 执行S.o.p()语句后,flag=true,然后又执行 if(flag) if(flag) //有wait(),被挂起,取消了资格,这时候 t2又进来了。 try(this.wait();) catch(Exception e){} // 问题就是:不是在 synchronized 函数中吗? t1还没出去,怎么t2就进来了呢?是不是t1被挂起后,锁也就释放了呢? this.name=name+"....."+count++; //t2才能进来。 System.out.println(Thread.currentThread().getName()+"...生产者"+this.name); flag=true; this.notify() } }
作者:
肖亚光
时间:
2013-1-18 09:00
我不是很理解你的意思
“老毕说:例子中有 t1,t2两个生产者,当t1进来后 执行S.o.p()语句后,flag=true,然后又执行 if(flag)”
这怎么还往回执行呢?没有看到循环呀
按照理解 是不是你没有理解 this.notify();呢?
作者:
Rancho_Gump
时间:
2013-1-18 10:27
放弃资格嘛 应该是这么理解的 拥有资格没有执行权 程序停那,另外一个线程也进不去
作者:
郭冰川
时间:
2013-1-18 21:53
本帖最后由 郭冰川 于 2013-1-22 12:48 编辑
线程wait的时候会发布监视器,也就是把手里面的锁放掉,如图
未命名.jpg
(81.12 KB, 下载次数: 24)
下载附件
2013-1-18 21:53 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2