Java 带屏障的进程间同步
我有一个Java程序,可以并行执行一些计算。我可以在一台机器上运行它,也可以使用多台不同的机器 在单台机器上执行时,通过使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier类成功实现线程同步。其思想是,所有线程必须等待其他线程到达同一点,然后才能继续计算 在多台不同的机器上执行时,进程间通信通过RMI(远程方法调用)实现。我在这种情况下也有同样的问题,我希望这些进程的线程在继续之前等待其他进程到达相同的点。我无法在不同进程之间使用共享CyclicBarrier对象,因为此类不可序列化 对于在多台机器上的不同进程上执行的线程,我有什么替代方法来获得这种屏障行为Java 带屏障的进程间同步,java,multithreading,parallel-processing,rmi,interprocess,Java,Multithreading,Parallel Processing,Rmi,Interprocess,我有一个Java程序,可以并行执行一些计算。我可以在一台机器上运行它,也可以使用多台不同的机器 在单台机器上执行时,通过使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier类成功实现线程同步。其思想是,所有线程必须等待其他线程到达同一点,然后才能继续计算 在多台不同的机器上执行时,进程间通信通过RMI(远程方法调用)实现。我在这种情况下也有同样的问题,我希望这些进程的线程在继续之前等待其他进程到达相同的点。我无法在不同进程之间使用共享Cycli
谢谢您不需要在进程之间传递CyclicBarrier。您可以进行RMI呼叫,然后使用CyclicBarrier。我建议您看看HazelCast的it支持distributed
Lock
和许多其他系列
我想我会重新考虑你是否真的需要所有的过程来检查这个点,并找到一种方法来避免一开始就需要这样做。你可以设置一个环境,让这个操作看起来不那么复杂。也就是说,这是一个使用distributed
AtomicNumber
统计到达方的方法。即使它是可序列化的,也不会被共享。序列化它会在目标上创建一个新副本,而不是一个共享对象。使用CyclicBarrier的RMI调用似乎是个好主意!我也在寻找异步技术来解决这个问题(并避免这个进程同步问题)。黑泽尔卡斯特似乎也很棒。我不确定我是否能够使用它,因为我在第三方集群上运行这个实验,而我对机器没有太多控制权。谢谢你的提示。