我有一个类,它包含对通过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)
,但问题保持不变。
是否存在某种等待多线程的等待/通知机制?
答案 0 :(得分:4)
您可以查看使用阻塞队列进行线程之间的通信。工作线程将插入队列,而getMessage()
函数从队列中提取消息。
答案 1 :(得分:0)
如下:
try {
ServerSocket srv = new ServerSocket(port);
// Wait for connection from client.
while (true) {
System.out.println("Listening...");
// Waits for connection
new Thread(new ServerWorkerThread(srv.accept())).start();
}
} catch (IOException e) {
//handle
}