实在脑不动了,问问各位师傅们吧(线程的问题)

哦 泄特 2020-03-25 10:11:10
我想做一个 生产者 工厂 消费者的多线程代码
想要实现的功能是 生产者2名 消费者2名 工厂1个
工厂在消费者消费的同时生产面包 生产数量到20个 生产者停止生产 wait睡眠,消费者在面包生产的同时消费商品 库存到0个叫醒生产者开始生产

现在的难点是 工厂是线程锁,商品不到20个的时候 2个生产者线程在同时竞争这个锁来生产面包,消费者也是在同时竞争锁来消费面包,那么问题来了,锁只有一个,如果消费者拿去了 那么生产者就没有锁了 2个生产者也就无法锁来竞争生产面包,同样如果锁被生产者拿去了,2个消费者也就无法竞争锁来消费面包,我想实现的是生产者之间有一把属于自己的锁,消费者之间也有一把属于自己的锁,当生产者wait了 消费者能通过notify唤醒生产者,我是自学的,所以没有老师 只能来论坛辛苦下大家,这样的功能能实现吗
...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
月夜轻飞雪 2020-03-26
  • 打赏
  • 举报
回复
第二个同步块正好相反。
月夜轻飞雪 2020-03-26
  • 打赏
  • 举报
回复
写一个监控线程,把生产者消费者的 锁传进去,监控线程while里面有两个同步块,第一个代码块 获取生产者锁,判断产品是否到了20,如果到了继续获取消费者锁,将生产者产品数量重置为0,消费者产品数量赋值为20,消费者锁.notifyAll(),
sunyiz 2020-03-26
  • 打赏
  • 举报
回复
我觉得可以稍微调整一下你的设计
你可以让生产出来的物件定期“出库”
就是说,刚被生产出来的面包在一个集合中
消费者不可以直接访问这个集合
在系统定期将这个集合中的面包“出库”转移到另一个供消费者使用的集合中之后
消费者才可以访问这个消费用的面包集合
这样,瓶颈就仅仅在定期出库转移时会和生成者有竞争了
不过只要这个“转移动作”足够短,对生产的影响应该是相当小的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧