采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
condition4Consumer和condition4Producer 都是用一个lock创建的,说明两个condition里面是一样的,只是两个Condition的对象名不一样。 为什么实际代码中却是condition4Consumer去让consumer线程唤醒或等待,condition4Producer去让producer线程唤醒或等待?
同学你好,这样命名只是为了做区分
再看一下代码生产者:
public
class
Producer
extends
Thread{
@Override
void
run() {
while
(
true
){
Desk.lock.lock();
try
{
if
(Desk.flag){
//厨师等待
Desk.condition4Producer.await();
}
catch
(InterruptedException e) {
throw
new
RuntimeException(e);
else
//厨师开始工作
System.out.println(
"厨师正在补充食物"
);
Desk.flag =
;
"producer 准备唤醒consumer"
Desk.condition4Consumer.signalAll();
finally
Desk.lock.unlock();
消费者:
Consumer
//不断地拿食物
//如果有实物 拿走,并通知厨师
"顾客取走食物"
false
"consumer 准备唤醒producer"
Desk.condition4Producer.signalAll();
Desk.condition4Consumer.await();
做一些简化,只关注condition的部分
producer:
(..){
condition4Producer.await();
condition4Consumer.signalAll();
consumer
condition4Producer.signalAll();
condition4Consumer.await();
你把他们的使用顺序反过来也是没问题的,例如
使用的原则就是:在producer await的时候,使用同一个condition signal all consumer consumer await的时候,使用同一个condition signal all producer创建condition的时候不需要绑定,靠咱们使用的时候灵活控制
明白了,谢谢老师
登录后可查看更多问答,登录/注册
吃透并发编程,高效解决复杂问题,进入优秀工程师行列
300 5
279 3
260 2
292 2
172 2
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号