java多线程轮流

时间:2013-11-28 21:05:27

标签: java multithreading sockets udp multicast

我有两个接收UDP多播的java线程。

每个线程将从大约60 Mbps的不同的多播流接收UDP数据包,然后在共享BlockingQueue中处理UDP数据包和队列。 UDP数据包大约为1300字节。

我想要队列中已处理的UDP数据包的顺序,这与数据包到达机器的NIC的方式相同,即使从不同的线程(不同的多播流)接收数据包也是如此。

我无法在这些线程中实现这一点,这是我的问题。

是否可以使用java,还是应该使用其他语言如C?

修改

基本上,线程将从不同的多播流接收多播,并且队列中的数据包顺序将取决于接收线程如何执行以从NIC获取数据包的顺序,但我希望命令与数据包到达NIC的方式相同。

我尝试为每个流降低UDP接收缓冲区,数据包几乎按顺序进入队列,但数据包开始丢失。如果我增加接收缓冲区,队列中的顺序完全取决于接收线程的执行方式。

请帮我解决这个问题。有可能吗?

1 个答案:

答案 0 :(得分:0)

序列号?定义一个流控制类,其中包含一个序列号,该序列号递增并加载到从该流接收的每个缓冲区对象中,池线程可以检查的“最后处理”数字以及每个无序缓冲区的列表你的游泳池出了名。

池线程检查它们出列的缓冲区是否具有正确的序列号(最后处理+ 1)。如果是这样,他们将处理缓冲区和列出的缓冲区中的任何后续数字。如果没有,他们会将该缓冲区添加到列表中以供以后处理。

PS:流控制类方法肯定需要锁定。