【问题标题】:Java Thread SyncJava 线程同步
【发布时间】:2021-12-29 22:19:47
【问题描述】:

我有一个班级商店。在 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();
}

shop类中的run方法

@Override
public void run() {

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

CODE...
   }
}

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



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

public void run() {

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

CODE...

并在main join()中使用,但是如何重新启动该方法时出现问题。

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

【问题讨论】:

    标签: java multithreading synchronize


    【解决方案1】:

    你应该熟悉CyclicBarrier类。

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

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

    见教程CyclicBarrier in Java

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多