我有一个Java程序并行执行一些计算。我可以在单台机器上运行它,也可以使用多台不同的机器。带有障碍的进程间同步
在单台机器上执行时,通过使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier类可以成功实现线程同步。这个想法是所有线程都必须等待其他线程在进行计算之前到达同一个点。
在多个不同的机器上执行时,进程间通信通过RMI(远程方法调用)实现。我在这种情况下遇到同样的问题,我希望这些流程的线程在继续之前等待其他人到达同一点。我不能在不同的进程之间使用共享的CyclicBarrier对象,因为这个类不是可序列化的。
对于在多台机器上的不同进程上执行的线程获取此屏障行为,我有什么替代方法?
谢谢
您可以设置此操作看起来不那么复杂的环境。即,这里是[Hazelcast的示例实现](https://code.google.com/p/hazelcast/issues/detail?id=435),它使用分布式的“AtomicNumber”来计算到达的各方。 –
即使它是可序列化的,它仍然不会被共享。对它进行序列化会在目标上创建新副本,而不是共享对象。 – EJP