Java线程同步

Way*_*ver 0 java multithreading synchronize

我有一个班级商店。在 main 中我在 main 中创建了 3 个商店对象

Thread thread1 = new Thread(shop1);
Thread thread2 = new Thread(shop2);
Thread thread3 = new Thread(shop3);


threads.add(thread1);
threads.add(thread2);
threads.add(thread3);

for (Thread t : threads) {
    t.start();
}
Run Code Online (Sandbox Code Playgroud)

商店类中的 run 方法

@Override
public void run() {

   for(int day=0;day<=360;++day) {
      if (day% 30 == 0) {
         delivery();
     }

CODE...
   }
}
Run Code Online (Sandbox Code Playgroud)

我希望线程每 30 天同步一次。所以每 30 天线程就会互相等待。
使用 Thread.join() 是最简单的,但是当我在 run() 中时如何使用它。



我也在考虑做而不是360天,12次30天

public void run() {

   for(int day=0;day<30;++day) {
      if (day% 30 == 0) {
         delivery();
     }

CODE...
Run Code Online (Sandbox Code Playgroud)

并在 main join() 中使用,但随后存在如何重新启动该方法的问题。

我可以做什么来同步这个?

Les*_*iak 5

你应该熟悉CyclicBarrier课堂。

一种同步辅助工具,允许一组线程全部等待彼此到达公共障碍点。CyclicBarriers 在涉及固定大小的线程组且偶尔必须相互等待的程序中非常有用。屏障被称为循环屏障,因为它可以在等待线程被释放后被重新使用。

请注意,您可以选择定义一个 BarrierAction,它由最后一个到达屏障的线程执行。

请参阅 Java 中的教程CyclicBarrier