我对 Java 线程有疑问。我必须分别运行两个线程以定义数量的步骤,然后我必须让它们通信。线程 1 必须读取线程 2 拥有和修改的 ArrayList,线程 2 也是如此。同步它们的更好方法是什么?我可以将 thread1 的 arrayList 用于线程 2,还是必须定义不同的共享区域?
谢谢大家。
我对 Java 线程有疑问。我必须分别运行两个线程以定义数量的步骤,然后我必须让它们通信。线程 1 必须读取线程 2 拥有和修改的 ArrayList,线程 2 也是如此。同步它们的更好方法是什么?我可以将 thread1 的 arrayList 用于线程 2,还是必须定义不同的共享区域?
谢谢大家。
使用专用同步器比锁定其中一个要干净得多ArrayList
。
我建议使用CyclicBarrier
. 引用 JavaDoc:
一种同步辅助工具,它允许一组线程相互等待以达到共同的障碍点。CyclicBarriers 在涉及固定大小的线程组的程序中很有用,这些线程组必须偶尔相互等待。屏障被称为循环的,因为它可以在等待线程被释放后重新使用。
由于情况是对称的,因此您不应选择一个 ArrayList 而不是另一个。使用附加对象。Exchanger看起来是最好的选择。