2013-05-30 75 views
0

我有一個Java線程的問題。我必須分別運行兩個線程以進行定義數量的步驟,然後我必須讓它們進行通信。 線程1必須讀取線程2擁有並修改的線程2的ArrayList。 哪種更好的方法可以同步它們?我可以使用線程2的thread1的arrayList還是必須定義不同的共享區域?每K步兩個線程同步

謝謝大家。

回答

4

使用專用同步器比鎖定其中一個ArrayList s要乾淨得多。
我建議使用CyclicBarrier。引用JavaDoc:

一種同步協助,它允許一組線程互相等待以達到公共障礙點。 CyclicBarriers在涉及固定大小的線程的程序中很有用,它必須偶爾等待對方。該屏障稱爲循環,因爲它可以在等待線程釋放之後重新使用。

+0

非常感謝。 – Nadir

0

由於情況是對稱的,您不應該選擇一個ArrayList而不是另一個ArrayList。使用其他對象。 Exchanger看起來是最好的選擇。