我有一个Java程序,可以并行执行一些计算。我可以在一台机器上运行它,也可以使用多台不同的机器运行它。
在单台机器上执行时,通过使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier类成功实现了线程同步。我们的想法是,在继续计算之前,所有线程必须等待其他线程到达同一点。
在多台不同的机器上执行时,通过RMI(远程方法调用)实现进程间通信。我在这种情况下遇到了同样的问题,我希望这些进程的线程在继续之前等待其他进程到达同一点。我不能在不同的进程之间使用共享的CyclicBarrier对象,因为这个类不可序列化。
在多台计算机上的不同进程上执行的线程上,我有哪些替代方法可以获得此屏障行为?
由于
答案 0 :(得分:3)
您不需要在进程之间传递CyclicBarrier。您可以进行RMI调用,然后使用CyclicBarrier。我建议你看看HazelCast支持分发Lock
和许多其他收藏。
恕我直言,我会重新考虑你是否真的需要所有流程来检查点并找到一种方法来避免首先需要这个。