4

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

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

由于开销(以及每个线程将有 <20 毫秒的工作时间),线程不会被连续创建和销毁是可取的,这带来了线程池1的想法。我也知道使用 Executable 2可以调用shutdown,然后调用awaitTermination。然而,由于循环,在这种情况下它是不可取的。那么线程同步怎么会发生呢?

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

4

3 回答 3

5

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

于 2011-11-29T17:30:25.507 回答
2

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

于 2011-11-29T18:01:02.587 回答
0

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

于 2011-11-29T17:52:43.967 回答