[英]Java: Wait/Notify on multiple threads
我有一個類,其中包含對通過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()
函數從隊列中提取一條消息。
怎么樣:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.