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

09-16 04:18