我的应用程序将在运行时包含多个线程(在此示例中为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)???
答案 0 :(得分:2)
这是CyclicBarrier的用途。它允许您定义线程将等到所有到达的位置,然后可选地运行Runnable
以执行同步或其他此类操作。
答案 1 :(得分:2)
我认为你需要一个java.util.concurrent.CyclicBarrier。
答案 2 :(得分:1)
后续问题: