等待多个线程时的最佳做法 - 时间,计数或其他?

时间:2014-11-03 10:18:21

标签: java multithreading

我的应用程序将在运行时包含多个线程(在此示例中为7)执行独立工作。但是,每隔一段时间,线程就必须同步它们的数据。

这将由调用DataSynchronizer对象的线程完成,它们都有引用。

我对这堂课流程的想法如下:

public class DataSynchronizer {

    public void synchronizeData(List<Data> threadData) {
        // Wait for all 7 threads to call this method

        // When all 7 are here, hold them here & do work using one of the threads
        // or a new anonymous thread

        // Release the threads & let them continue their independent work
    }
}

我的问题是,在进行同步工作之前,'等待所有x个线程'的最佳方法是什么?

我知道所有线程都会在1,最多2秒内调用synchronizeData方法。

我也是,

1)在第一个线程调用方法后等待2秒并假设现在所有线程都已到达?或

2)保持计数以确保所有活动线程都已到达? (如果线程在调用方法之前崩溃,应用程序将等待永久)

3)计数+超时?

4)???

3 个答案:

答案 0 :(得分:2)

这是CyclicBarrier的用途。它允许您定义线程将等到所有到达的位置,然后可选地运行Runnable以执行同步或其他此类操作。

答案 1 :(得分:2)

我认为你需要一个java.util.concurrent.CyclicBarrier。

答案 2 :(得分:1)

  1. 假设和线程是一种非常冒险的方法。
  2. 等待永恒有多糟糕?听起来很不方便。
  3. 如果你达到超时,你可以做一些有用的事吗?崩溃程序,重新启动错误的线程,假设它正在做什么?
  4. 后续问题:

    • 如果某个帖子没有参与同步,会发生什么?
    • 如果同步延迟会怎样?
    • 你的方法应该告诉另一个线程,还是只有7个可互换的工作者?