我有一个类,其中包含对通过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()
函数从队列中提取一条消息。