gpt4 book ai didi

java重用一个执行器

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:48 26 4
gpt4 key购买 nike

我在一个模拟系统上工作,在每个时间步,我都必须模拟许多模型。我使用 FixedThreadPool 来加速计算:

ExecutorService executor = Executors.newFixedThreadPool(nThread);
for (Model m : models) {
executor.execute( m.simulationTask() );
}
executor.shutdown();
while ( ! executor.awaitTermination(10, TimeUnit.MINUTES) ) {
System.out.println("wait");
}

现在,执行器在调用shutdown() 后不能用于execute() 新任务。有没有办法重置执行器,以便我可以在下一个模拟步骤中重用现有的执行器(及其线程)?

最佳答案

如果您对代码进行一些重组,您可以重用执行程序服务。

Collection<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>(16);
for (Model m : models) {
tasks.add(m.simulationTask());
}

ExecutorService executor = Executors.newFixedThreadPool(nThread);
try {
executor.invokeAll(tasks);
} catch(InterruptedException ie) {
// Handle this
}

基本上,您收集所有任务,执行它们,并在继续之前等待执行。当然,您也可以选择为每个时间步使用一个新的执行器服务,但至少您有选择权。

警告:我没有编译代码,因此可能存在错误。为了方便起见,我还假设了一个 Integer 参数类型。

关于java重用一个执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036080/

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