2011-11-29 60 views
6

我希望能夠創建多個線程並根據主程序接收到的數據將數據發送到特定的線程。發送數據到特定線程

基本上我發送一個數據包到一個包含一個數字的接收程序。該號碼用於確定要與哪個線程通信。我怎樣才能將這個數據包發送到具有相同號碼的線程?

示例:線程1,2,3,4和5存在。我的主程序收到一個數字爲3的數據包。我想將該數據包發送到線程3.

我該如何實現這一目標?

+0

爲什麼不保持連接處於活動狀態,然後將發送/接收的數據委託給包含該套接字的線程? –

+0

我正在製作一個虛擬路由器(一個類項目),所以它需要像一個真正的路由器。所以我所做的這些線程都是作爲我的路由器的不同端口。我們的數據包被髮送到我們的程序正在監聽的真實端口,然後我們的程序將它發送到虛擬端口(線程)。 –

回答

6

爲每個線程創建一個隊列,並讓每個線程監聽該隊列。然後,主線程可以在每個隊列上放置數據(或「消息」)。

你只需要確保你選擇的隊列結構對於併發訪問是安全的(線程安全的)。像LinkedBlockingQueue應該很好。

+0

我喜歡它!是在主線程中還是在子線程中創建隊列? –

+1

無論您希望如何,儘管我會在創建每個線程的同時創建它們 - 這意味着它們是在主線程中創建的。然後他們被主線程和子線程訪問,主線程將數據推送到隊列中,子線程將數據從隊列中拉出。 – ziesemer

+0

下面是使用BlockingQueues的生產者 - 消費者模式的示例。 http://www.javamex.com/tutorials/synchronization_producer_consumer_2.shtml – Luhar