java - 带屏障的进程间同步

标签 java multithreading parallel-processing rmi interprocess

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

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

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

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

谢谢

最佳答案

您不需要在进程之间传递 CyclicBarrier。您可以执行一个 RMI 调用,该调用又使用 CyclicBarrier。我建议您看看 HazelCast,它支持分布式 Lock 和许多其他集合。

恕我直言,我会重新考虑您是否真的需要所有流程来检查点,并找到一种方法来避免首先需要它。

关于java - 带屏障的进程间同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276256/

相关文章:

java - 如何从类对象的成员变量中获取类对象?

当某些线程创建 Webdriver 时 Python Selenium 失败

c++ - volatile 文件间或线程间?

c# - 同时启动多个线程

parallel-processing - F#如何并行做List.map

java - 在 Java 上使用 Gridbag 分隔多个按钮

java - 任何用于 Java 的 RFC 2397 数据 URI 解析器?

java - 读取 CSV 文件返回 java.io.FileNotFoundException :

java - 编译 Java 使其表现得像 GO 代码

c - OpenMP 任务 - 为什么在 ~10k 的迭代次数较多时会出现段错误?