Java : Semaphore: Producer Consumer: Threads and ThreadGroup

标签 java multithreading semaphore producer-consumer

我已经为生产者和消费者实现了一个信号量类。

它工作正常,但我现在感觉我们使用 notifyAll 来通知唤醒的线程或通知所有线程。

我想知道是否有任何方法可以只通知一组特定的组:比如生产者只通知消费者线程,反之亦然使用组或其他任何方式。

PS:我是 java 和线程的新手。

最佳答案

在我看来,您是在重新发明轮子。 Semaphoresjava.util.concurrent package 中可用.

此外,对于生产者/消费者数据结构,我建议您只使用 BlockingQueue

无论如何,notify 方法会通知一位(未指定的)服务员。如果您确实需要一个特定的“命令”让哪些信号通过,我相信您必须 notifyAll 并“手动”确保只允许相关信号量获取信号量。


对于您的特殊情况,在我看来您需要一个用于生产者的等待集,一个用于消费者的等待集。由于每个对象都有一个等待集,因此不可能只通知使用一个对象的消费者(或生产者)。也许你想要的是有两个对象,一个被生产者获取,一个被消费者获取,然后执行 consumerObj.notifyAll()producerObj.notifyAll(),取决于你想唤醒哪组线程。

关于Java : Semaphore: Producer Consumer: Threads and ThreadGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671609/

相关文章:

java - 上传后检查文件类型

Java代码查找数据库所有表的唯一键

C# 线程和属性

java - 在 linux 中设置 JAVA_HOME

java - Java EE 应用程序中的线程死锁

c# - 我可以限制 ThreadPool 中线程的创建吗?

linux - IPC 命名信号量的 POSIX 实现

ruby - 如何限制同一 Ruby 脚本的并发实例?

c - 父进程在子进程之前执行,如何通过信号量强制相反?

java - 字符串到 Java 类