Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java多线程轮流运行_Java_Multithreading_Sockets_Udp_Multicast - Fatal编程技术网

java多线程轮流运行

java多线程轮流运行,java,multithreading,sockets,udp,multicast,Java,Multithreading,Sockets,Udp,Multicast,我有2个java线程接收UDP多播 每个线程将从不同的多播流接收大约60 Mbps的UDP数据包,然后在共享阻塞队列中处理UDP数据包和队列。UDP数据包的大小约为1300字节 我想要队列中已处理UDP数据包的顺序,这与数据包到达机器NIC的方式相同,即使从不同线程(不同的多播流)接收数据包 我无法在这些线程中实现这一点,这是我的问题 是否可以使用java,或者我应该使用其他语言,如C 编辑 基本上,线程将从不同的多播流接收多播,队列中的数据包顺序将取决于接收线程从NIC获取数据包的执行顺序,但

我有2个java线程接收UDP多播

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

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

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

是否可以使用java,或者我应该使用其他语言,如C

编辑


基本上,线程将从不同的多播流接收多播,队列中的数据包顺序将取决于接收线程从NIC获取数据包的执行顺序,但我希望顺序与数据包到达NIC的顺序相同

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


请帮我做这个。可能吗?

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

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


PS:当然,流控制类方法需要锁定

几乎可以肯定这是可能的。你试过什么?您的解决方案在哪里失败了?我尝试了Thread.yield()和Thread.sleep(0),以使每个RX线程轮流执行,但我没有得到正确的结果基本上,线程将从不同的多播流接收多播,队列中的数据包顺序将取决于接收线程从NIC接收数据包的执行顺序,但我希望订单与数据包到达NIC的方式相同。@Keppil您能指导我吗?对不起,这对我来说仍然太模糊,无法帮助您。