我有一個Java程序並行執行一些計算。我可以在單臺機器上運行它,也可以使用多臺不同的機器。帶有障礙的進程間同步
在單臺機器上執行時,通過使用java.util.concurrent.CyclicBarrier包中的CyclicBarrier類可以成功實現線程同步。這個想法是所有線程都必須等待其他線程在進行計算之前到達同一個點。
在多個不同的機器上執行時,進程間通信通過RMI(遠程方法調用)實現。我在這種情況下遇到同樣的問題,我希望這些流程的線程在繼續之前等待其他人到達同一點。我不能在不同的進程之間使用共享的CyclicBarrier對象,因爲這個類不是可序列化的。
對於在多臺機器上的不同進程上執行的線程獲取此屏障行爲,我有什麼替代方法?
謝謝
您可以設置此操作看起來不那麼複雜的環境。即,這裏是[Hazelcast的示例實現](https://code.google.com/p/hazelcast/issues/detail?id=435),它使用分佈式的「AtomicNumber」來計算到達的各方。 –
即使它是可序列化的,它仍然不會被共享。對它進行序列化會在目標上創建新副本,而不是共享對象。 – EJP