黑马程序员技术交流社区
标题:
多线程通信--同步函数的疑问
[打印本页]
作者:
孙峰
时间:
2012-6-4 17:40
标题:
多线程通信--同步函数的疑问
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()
}
}
作者:
田建
时间:
2012-6-4 19:53
这个问题的出现,虽然t1是在synchronized中,但是当t1在wait()时,会放弃掉自己的执行资格,同时也会释放掉锁,此时醒着的t2是能够进来的,只要他抢到执行权的话!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2