如何用较低级别的替代方案替换此CyclicBarrier?

时间:2018-01-21 19:05:17

标签: java multithreading concurrency

我想知道如何用其他东西替换这个CyclicBarrier,比如数组中所有线程的通常join。这是片段(为了清楚起见,省略了try-catch块等):

protected void execute(int nGens)
{
    CyclicBarrier thread_barrier = new CyclicBarrier(n_threads+1);
    ExecutorService thread_pool = Executors.newFixedThreadPool(n_threads);
    for (int i=0; i<thread_array.length; i++) // all threads are in this array
        threadPool.execute(thread_array[i]);

    for (int i=0; i<total_generations; i++)
        threadBarrier.await();
    threadPool.shutdown();
    while(!threadPool.isTerminated()){}
}

这是线程执行的代码

public void run()
{
    for (int i=0; i<total_generations; i++)
    {
        next_generation(); // parallel computation (aka the 'task')
        thread_barrier.await();
    }
}

如您所见,所有线程都在启动时启动,然后多次执行某项任务。每次完成任务时,他们都会等到所有其他线程完成任务,然后再次执行。是否有任何较低级别的方法来实现这种同步?

0 个答案:

没有答案