我有多个线程发送相同的数据包,并希望所有线程在继续发送下一个数据包之前完成。
我使用以下代码测试了 CyclicBarrier:测试代码(太长/太乱而无法嵌入) 这按预期工作,打印 0 - 4 的组合,然后在循环中完成
对于数据包发送方,代码是等价的,除了 for 循环是:
for(RSocket sendSocket : sendSocketList){
new Thread(new Send(sendSocket , toServer)).start();
}
barrier.await();
发送是:
private class Send implements Runnable{
private RSocket sendSocket;
private MPacket packet;
public Send(RSocket sendSocket, MPacket packet){
this.sendSocket = sendSocket;
this.packet = packet;
}
public void run(){
sendSocket.send(packet);
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
RSocket.send(数据包); 功能与常规套接字的 writeObject() 函数相同,除了它会阻塞直到完成(当它接收到 ACK 时)。假设网络方面是正确的,我是否正确使用了 CyclicBarrier?
PS我应该指出,如果我使用for循环而不启动新线程,它会按预期工作,即:
for(RSocket sendSocket : sendSocketList){
sendSocket.send(toServer);
}