我的應用程序有一個singleton類(與串行COM端口通信)處理來自多個線程的數據請求。在處理請求時,線程應爲wait()
。我如何通知線程數據已準備就緒(並將其發回)而不喚醒所有正在等待的線程?發送數據到一個特定的線程
回答
爲每個線程創建一個blocking queue並將它們注入到Singleton中。當有任何答案到達時,只需選擇適當的線程隊列,並將提供(E o)方法的消息放入其中。
在使用take()方法的線程中,您可以等待無限時間的答案,或者使用輪詢(超時時間,TimeUnit單位)進行時間盒等待。
您可以使用額外的concurrent queue來餵養單身人士而不會阻止它。
雖然@Lexandro有一個很好的答案,但一個更簡單的替代方案可以滿足您的需求(據我所知,線程等待/阻塞是o.k.)就是在靜態類中同步該方法。
我同意你的看法,但是我個人更喜歡沒有使用同步塊/方法的解決方案。 – Lexandro
同意。我會給你一個upvote。 – user949300
我嘗試了一個類似的解決方案,但沒有工作。原因是有一個'serialPortActionListener''wich接收所有數據。但是每個數據包都會被加入到特定的線程中(當線程向無線電傳輸者請求數據時,它會發回他們的地址,以便將數據傳送給正確的客戶端)。就像我看到的那樣,有一個'serialPortActionListener'實例需要將數據重定向到特定的線程。所以我需要不斷地參考每個線程。 – BrunoPires
- 1. 發送數據到特定線程
- 2. SignalR-發送數據到一個特定的客戶端
- 3. SignalR 1.0 - 發送數據到一個特定的客戶端
- 4. 發送數據到Python中的線程
- 5. 將更新/數據從一個線程發送到Android中的UI線程
- 6. 發佈到特定線程
- 7. PyQt4線程:發送數據回線程
- 8. 發送作業到一個std ::線程
- 9. 從主函數發送一個信號到一個線程?
- 10. 如何將數據發送到特定的應用程序?
- 11. 發送處理的消息到特定的線程
- 12. 發送輸出音頻到一個特定的程序
- 13. Qt 4.7發送信號到特定的線程
- 14. 從後臺線程發送數據到主線程
- 15. 如何將一個int值從一個線程發送到另一個線程?
- 16. Java:定期將數據從線程發送到主類
- 17. 配置Scapy監聽特定的數據包,一旦收到數據包,發送特定的數據包
- 18. iOS - 另一個線程需要發送reloadData到主線程
- 19. 發送文本到一個數組中的特定li
- 20. HM-10 BLE主控併發送數據到特定的特徵
- 21. 發送一個特定的行到另一個PHP文檔
- 22. C#發送特定數據的TcpClient
- 23. 用HttpWebRequest發送特定的數據包
- 24. iPhone編程:從一個iPhone發送數據到另一個?
- 25. 使用隊列()將命令發送到特定線程
- 26. 從另一個線程向QSerialPort發送數據
- 27. 如何將一個位圖數據從一個背景線程發送到主線程?
- 28. 如何確保同步時,一個線程不斷髮送數據到另一個線程?
- 29. 發送套接字數據到一個特定的套接字id socket.io
- 30. Node.js發送一個帶有函數定義的對象到工作線程
如果您不需要使用Java 1.4,則應該使用來自'java.util.concurrent'的對象,而不要使用'wait/notify'。 –
我會使用[BlockingQueue](http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html) - 使用隊列上的'take'來讓線程等待直到數據準備就緒 –
單身是多人編程的噩夢。 – 2013-06-27 21:03:39