gpt4 book ai didi

java - 执行者 : Wait for specific tasks to finish

转载 作者:行者123 更新时间:2023-11-29 05:12:18 26 4
gpt4 key购买 nike

我正在运行的服务器应用程序收到多个任务请求,我想使用任务系统处理这些请求。

每个任务都表示为一个 Runnable,它将从线程池中请求 n 个线程,其中 n 小于或等于线程池大小。为了线程过多导致 CPU 过载,线程池当然是必需的。

但是,其中一些任务可以是多线程的,而另一些则不能。这就是为什么一个任务可能需要等待其所有特定线程完成才能合并来自这些线程的结果以获得最终结果的原因。

如果一个人使用多个 Thread 实例,那么可以像这样加入它们:

try {
// Wait for all threads to finish their tasks
for (Thread thread : threads) {
thread.join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}

// Finish job here ..

但我需要这样的东西,使用 java.util.concurrent.Executor 或任何与线程池一起工作的类似东西。

最佳答案

您可以将 ExecutorServiceCyclicBarrier 一起用于每个任务,如下所示:

public class ThreadedTask implements Runnable {
CyclicBarrier barrier;
public ThreadedTask(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
// do something
barrier.await();
}
}
ExecutorService executor = Executors.newFixedThreadPool(pool_size);
...
CyclicBarrier barrier = new CyclicBarrier(n+1);
for(int i=0; i<n; i++) {
// launch all tasks
executor.submit(new ThreadedTask(barrier));
}
// waits for the tasks to finish or timeout
barrier.await(seconds, TimeUnit.SECONDS);

关于java - 执行者 : Wait for specific tasks to finish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27960935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com