转载请注明:来自http://blog.youkuaiyun.com/M_ChangGong/ 作者:张燕广
java多线程通信,模拟生产者-消费者关系。
第1种实现(该实现存在问题),具体代码如下:
虽然生产方法put和消费方法get都进行了同步操作,但是执行以上代码,打印的结果却是错误的。原因是Proudcer类中run方法中以下两行代码没有进行同步操作:
w.put(i);
//该语句引起问题
System.out.println("Producer 生产 " + i);
当执行完毕w.put(i);后CPU时间片完毕,这时候下面的打印语句还没有执行,所以就出问题了。
第2种实现,修改第1种实现,解决其存在的问题,具体代码如下:
该实现虽然没有什么问题,但是其设计并不合理。
第3种实现,完善第2种实现,具体代码如下: