【发布时间】:2023-04-07 07:58:01
【问题描述】:
我指的是来自site 的生产者-消费者示例
在生产者和消费者代码中,wait 被包裹在循环中,而循环又被包裹在 synchronized 块中。
但是一旦 wait 返回,即从 while 循环,我不知道线程如何重新获取锁,因为从队列中添加/删除项目仍在同步块内。
另外我觉得我们可能需要两个不同的锁,即一个用于消费者,一个用于生产者,而不是锁定整个队列。因为我觉得任何时候消费者/生产者都可以在队列中工作。
如果我的理解有误,请告诉我。如果有人可以为示例提供两个不同的锁,那就太好了。
【问题讨论】:
-
wait释放锁,等待有人调用notify(),然后加入雷鸣般的羊群重新获得它。这一切都发生在内部。你不需要知道它是如何发生的,你只需要知道它发生的那个。你的第二个问题跑题了。
标签: java multithreading design-patterns concurrency producer-consumer