【发布时间】:2013-12-15 02:08:33
【问题描述】:
我有一个 Java 程序,它可以并行执行一些计算。我可以在一台机器上运行它,也可以使用多台不同的机器。
在单机上执行时,使用 java.util.concurrent.CyclicBarrier 包中的 CyclicBarrier 类成功实现线程同步。这个想法是所有线程必须等待其他线程到达同一点才能继续计算。
在多台不同机器上执行时,进程间通信是通过 RMI(远程方法调用)实现的。在这种情况下我有同样的问题,我希望这些进程的线程在继续之前等待其他进程到达同一点。我不能在不同进程之间使用共享的 CyclicBarrier 对象,因为此类不可序列化。
在多台机器上的不同进程上执行的线程上获得这种屏障行为的替代方法是什么?
谢谢
【问题讨论】:
-
您可以设置一个环境,使此操作看起来不那么复杂。即,这里是a sample implementation for Hazelcast,它使用分布式
AtomicNumber来计算到达方。 -
即使它是可序列化的,它仍然不会被共享。对其进行序列化会在目标上创建一个新副本,而不是共享对象。
标签: java multithreading parallel-processing rmi interprocess