Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Parallel Processing_Rmi_Interprocess - Fatal编程技术网

Java 带屏障的进程间同步

Java 带屏障的进程间同步,java,multithreading,parallel-processing,rmi,interprocess,Java,Multithreading,Parallel Processing,Rmi,Interprocess,我有一个Java程序,可以并行执行一些计算。我可以在一台机器上运行它,也可以使用多台不同的机器 在单台机器上执行时,通过使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier类成功实现线程同步。其思想是,所有线程必须等待其他线程到达同一点,然后才能继续计算 在多台不同的机器上执行时,进程间通信通过RMI(远程方法调用)实现。我在这种情况下也有同样的问题,我希望这些进程的线程在继续之前等待其他进程到达相同的点。我无法在不同进程之间使用共享Cycli

我有一个Java程序,可以并行执行一些计算。我可以在一台机器上运行它,也可以使用多台不同的机器

在单台机器上执行时,通过使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier类成功实现线程同步。其思想是,所有线程必须等待其他线程到达同一点,然后才能继续计算

在多台不同的机器上执行时,进程间通信通过RMI(远程方法调用)实现。我在这种情况下也有同样的问题,我希望这些进程的线程在继续之前等待其他进程到达相同的点。我无法在不同进程之间使用共享CyclicBarrier对象,因为此类不可序列化

对于在多台机器上的不同进程上执行的线程,我有什么替代方法来获得这种屏障行为


谢谢

您不需要在进程之间传递CyclicBarrier。您可以进行RMI呼叫,然后使用CyclicBarrier。我建议您看看HazelCast的it支持distributed
Lock
和许多其他系列


我想我会重新考虑你是否真的需要所有的过程来检查这个点,并找到一种方法来避免一开始就需要这样做。

你可以设置一个环境,让这个操作看起来不那么复杂。也就是说,这是一个使用distributed
AtomicNumber
统计到达方的方法。即使它是可序列化的,也不会被共享。序列化它会在目标上创建一个新副本,而不是一个共享对象。使用CyclicBarrier的RMI调用似乎是个好主意!我也在寻找异步技术来解决这个问题(并避免这个进程同步问题)。黑泽尔卡斯特似乎也很棒。我不确定我是否能够使用它,因为我在第三方集群上运行这个实验,而我对机器没有太多控制权。谢谢你的提示。