gpt4 book ai didi

java - ThreadPoolExecutorService 顺序执行线程而不是并发执行线程?

转载 作者:行者123 更新时间:2023-12-02 11:36:16 26 4
gpt4 key购买 nike

所以我尝试从线程内启动一个新线程。

function(update):
under certain conditions:
add a new thread running same service as current

理想情况下,我希望新线程运行并且当前线程继续执行。

相反,会创建一个新线程,但只有当它完成时,我的主机线程才会再次继续。

理想情况下,我需要它同时执行,其中添加新线程与从原始类添加线程具有相同的效果。

我如何使用执行器服务来做到这一点?

我目前正在初始化如下:

ExecutorService executorService = Executors.newFixedThreadPool(100);

添加线程功能:

 final SimulatedAnnealingCallable simulatedAnnealingCallable =
new SimulatedAnnealingCallable(this, schedule);

final Future<Schedule> future = executorService.submit(simulatedAnnealingCallable);

try {
future.get();
} catch (ExecutionException ex) {
ex.getCause().printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

稍后关闭

最佳答案

原因是您在 future.get() 中阻塞了主线程。

实际发生的情况是,您的主线程与执行程序一起启动一个新的 future 任务,然后您通过告诉它等待执行任务的结果来阻止主线程。

处理此问题的一种方法是不等待 future 完成,而是添加功能以让您知道使用可调用任务已完成。

例如

public interface CompletedTask {
void completed(boolean succes);
}

// change SimulatedAnnealingCallable to receive CompletedTask in constructor
// and call the instanc's completed method

public LogicClass implements CompletedTask {

private void someFunc() {
final SimulatedAnnealingCallable simulatedAnnealingCallable =
new SimulatedAnnealingCallable(this, schedule);
executorService.submit(simulatedAnnealingCallable);
}

public void completed(boolean succes) {
System.out.println("task is completed with " + success);
}
}

HTH,加尔

关于java - ThreadPoolExecutorService 顺序执行线程而不是并发执行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48911400/

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