问题不是出在代码上,在毕老师分析多个生产者消费者时,下面这段代码容易出现生产多个消费一个或是生产一个消费多个的问题,问题的原因也就不说了,我的问题是:当生产者生产了一次,若是他还有执行权,他执行到wait时,会停下来(放弃执行权),这个时候这个生产者会放弃锁吗?如果不放弃这个程序不会执行下去的,如果放弃锁,是wait让他放弃的吗?
- class Res
- {
- private String name;
- private int count=1;
- private boolean flag=false;
- public synchronized void set(name)
- {
- if(flag)
- try
- {
- wait();
- }
- catch(Exception e)
- {}
- this.name=name+"......"+count++;
- System.out.println(Thread.currentThread().getName()+"....生产者..."+this.name)
- flag=true;
- notify();
- }
- public synchronized void out()
- {
- if(flag)
- try
- {
- wait();
- }
- catch(Exception e)
- {}
- System.out.println(Thread.currentThread().getName()+"....消费者..."+this.name)
- flag=flag;
- notify();
- }
- }
复制代码 |