2011-11-29 59 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