我已经为生产者和消费者实现了一个信号量类。
它工作正常,但我现在感觉我们使用 notifyAll 来通知唤醒的线程或通知所有线程。
我想知道是否有任何方法可以只通知一组特定的组:比如生产者只通知消费者线程,反之亦然使用组或其他任何方式。
PS:我是 java 和线程的新手。
最佳答案
在我看来,您是在重新发明轮子。 Semaphores在 java.util.concurrent
package 中可用.
此外,对于生产者/消费者数据结构,我建议您只使用 BlockingQueue
。
无论如何,notify
方法会通知一位(未指定的)服务员。如果您确实需要一个特定的“命令”让哪些信号通过,我相信您必须 notifyAll
并“手动”确保只允许相关信号量获取信号量。
对于您的特殊情况,在我看来您需要一个用于生产者的等待集,一个用于消费者的等待集。由于每个对象都有一个等待集,因此不可能只通知使用一个对象的消费者(或生产者)。也许你想要的是有两个对象,一个被生产者获取,一个被消费者获取,然后执行 consumerObj.notifyAll()
或 producerObj.notifyAll()
,取决于你想唤醒哪组线程。
关于Java : Semaphore: Producer Consumer: Threads and ThreadGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671609/