gpt4 book ai didi

java - ExecutorService 永远不会停止,没有异常

转载 作者:行者123 更新时间:2023-12-04 06:05:47 25 4
gpt4 key购买 nike

我采用了来自 this post 的并发策略.但是我的看起来像这样:

ExecutorService executorService = Executors.newFixedThreadPool(NUMBER_OF_CREATE_KNOWLEDGE_THREADS);
List<Callable<Collection<Triple>>> todo = new ArrayList<Callable<Collection<Triple>>>(this.patternMappingList.size());
for (PatternMapping mapping : this.patternMappingList ) {
todo.add(new CreateKnowledgeCallable(mapping, i++));
}
try {

List<Future<Collection<Triple>>> answers = executorService.invokeAll(todo);
for (Future<Collection<Triple>> future : answers) {

Collection<Triple> triples = future.get();
this.writeNTriplesFile(triples);
}
}
catch (InterruptedException e) { ... }
catch (ExecutionException e) { ... }

executorService.shutdown();
executorService.shutdownNow();

但是 ExecutorService 永远不会关闭。我试图调试有多少 CreateKnowledgeCallable 完成,但这个数字似乎有所不同(在没有执行新线程/可调用但服务继续运行之后)。我确信记录并打印了所有可能的异常,但我看不到任何异常发生。似乎过了一段时间也没有任何 react 除了 NUMBER_OF_CREATE_KNOWLEDGE_THREADS cpu 永远以 100% 的速度旋转。我究竟做错了什么?
如果您需要更具体的信息,我很乐意为您提供!

亲切的问候,
丹尼尔

最佳答案

当您执行 shutdownNow() 时,它会中断池中的所有线程。但是,如果您的代码忽略中断,它们将不会停止。你需要通过测试来让你的任务尊重中断

while(!Thread.currentThread.isInterrupted()) {

}

或者
Thread.sleep(0);

关于java - ExecutorService 永远不会停止,没有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383710/

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