gpt4 book ai didi

java - 等待执行程序服务中的线程完成

转载 作者:行者123 更新时间:2023-12-01 18:34:17 24 4
gpt4 key购买 nike

我已经用 N 个线程初始化了一个执行器服务。 N 个线程完成后,我想等待一段时间,然后将执行器与 N 个线程的新实例重用。我该怎么做?

这是我正在使用的失败的示例代码:

       int NumberOfThreads=Integer.parseInt(PropertyHandler.getProperty("numberOfThreads"));

ExecutorService executor = Executors.newFixedThreadPool(NumberOfThreads);
log.info("Executor class has been initialized");
while (true) {

jobStack = MrMestri.buildJobs();
log.info("Creating a job stack of the search urls");
if (jobStack.isEmpty())
{
Thread.sleep(10000);
}
else {
int jobToken = 0;
while (jobStack.size() > 0) {
jobToken++;
MrRunnable worker = new MrRunnable(jobStack.pop());
executor.execute(worker);
if (jobToken% Integer.parseInt(PropertyHandler.getProperty("totalTrends")) == 0) {
log.info("All jobs for the clock cycle complete , waiting for next clock cycle to start. Number of jobs completed " + jobToken);
executor.shutdown();
Thread.sleep(milliseconds);

}

现在我正在使用执行程序关闭,没有执行程序来执行我的线程。我的线程实现了可运行的。

任何快速回复都会有很大帮助。谢谢。

最佳答案

只是不要关闭你的执行器 - 而是重用它。生成 Callable 任务的集合而不是 Runnable 并使用:

executor.invokeAll

它将执行所有任务并在所有任务完成后立即返回。如果 MrRunnable 不是您的类,或者出于某种原因它必须实现 Runnable,您可以简单地将其转换为 Callable,如下所示:

new Callable<Void>()
{
@Override
public Void call() throws Exception {
worker.run();
return null;
}
};

关于java - 等待执行程序服务中的线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748273/

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