我有一个类,其中包含对通过 TCP 接收对象的工作线程的引用集合(每个客户端 1 个)。
我正在尝试在我的类中创建一个方法getMessage()
,该方法会等待任何工作线程收到消息并返回它。
我现在得到的是一个轮询系统:
public Object getMessage() {
while (true) {
for (Worker w : workers.values())
if (w.msgNumber() != 0)
return w.getLastMsg();
Thread.sleep(100);
}
}
它可以工作,但我认为它的可扩展性不是很好。
我知道我可以对每个工作人员执行wait(timeout)
,但问题仍然存在。
是否有某种等待多个线程的等待/通知机制?
最佳答案
您可以考虑使用阻塞队列来进行线程之间的通信。工作线程将插入到队列中,而 getMessage()
函数从队列中提取消息。
关于Java:在多个线程上等待/通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164183/