- 论坛徽章:
- 0
|
初学者Thread线程问题,着急ing
这是一个典型的线程同步问题,其实很好理解,对Producer来说,生产的过程有2个步骤
buffer.put(i);
System.out.println(i+" produced." ;
对Consumer来说,消费也是2个步骤
buffer.get();
System.out.println(...+" consumed." ;
尽管被写再一行里面,但是对于jvm来说,还是2件事情。
而你的Buffer的控制,只对get和put有效,也就是说,当你println的时候,buffer已经在做下一轮的get和put了,所以看起来好像控制会失效,其实还是有效的。要让这两个步骤绑定在一起,解决的办法是用synchronized块
- synchronized(buffer)
- {
- buffer.put(i);
- System.out.println(i+" produced.");
- }
- synchronized(buffer){
- System.out.println(buffer.get() +" consumed.");
- }
复制代码 |
|