Java线程池同步

时间:2011-11-29 17:09:18

标签: java multithreading threadpool thread-synchronization

我想执行以下算法 - 这必须在Java中完成

for(int i = 0; i< 100; i++){
    create 8 threads which perform a task
    wait for all threads to finish
}

最好不要因为开销(以及每个线程的工作时间<20毫秒)而不断创建和销毁线程,这就产生了线程池1的想法。我也知道使用可执行文件2,可以调用shutdown,然后使用awaitTermination。然而,在这种情况下由于环路是不可取的。那么线程同步怎么会发生呢?

我想在线程池中同步线程,就像使用传统线程的join()方法一样。

3 个答案:

答案 0 :(得分:5)

您是否尝试过查看Cyclic Barrier。它经过优化,允许一组线程停止并等待每个人都达到共同的障碍。我没有看到任何理由为什么它不能与已知数量的汇集线程一起使用,并引用了一个共同的障碍。如果您需要同步调用带有障碍await()计数的回调,则可能会有一些额外的复杂性,因为它在不同的线程中执行。

答案 1 :(得分:2)

您需要将所有任务都放在队列中,然后将队列提供给ThreadPoolExecutor。您告诉线程池执行程序要使用多少线程,它负责执行任务。

答案 2 :(得分:0)

看一下jdk 7的fork / join框架。