狂神说多线程 管程法 细节问题处理
错误点
1.生产商品和消费商品操作不符合原子性
输出语句要写在synchronized代码块里,保证操作的原子性,
不然会出现这样的错误,生产了1-10,正常来说从10开始消费,
但是因为输出语句没写对位置,生产完0之后已经开始消费,
但是刚pop完,准备输出语句,但是线程被夺走了,类似这样的问题很多
2.多线程消费时的错误
判断count==0或者count==10的时候,要用while而不是if。线程醒来如果
是在if判断里不会重新判断,直接就运行下面代码,多个消费者情况下会
出现这个错误,有第一个消费者把所有商品都消费完了,数组下标为0了,
但是第二个消费者线程消费时,不会重新判断数组下标,此时就会继续
执行下面代码,0-1=-1,出现下标越界错误