代码:
final ForkJoinPool forkJoinPool = new ForkJoinPool(PARALLELISM_NUMBER);
try {
final List<Record> records = getRecrods();
List<List<Record>> partitionRecordLists = Lists.partition(records, BATCH_SIZE);
forkJoinPool.submit(() ->
partitionRecordLists.parallelStream().forEach(this::performSomething)
).join();
} finally {
forkJoinPool.shutdown();
}我有上面的代码来并行地执行一些任务。考虑到join已经使调用方线程等待完成,所以想知道在finally块中它是否应该是shutdowNow()而不是shutdown()。
注意:performSomething只从输入列表中读取。
发布于 2022-02-02 09:35:09
通常:shutdown();意味着您正在为executor服务执行干净/有序的关闭操作,而在特定情况下使用的shutdownNow();通常用于错误处理或绕过任何未启动和不太重要的后台服务。
在您的情况下,使用join()时不会有任何不同。但是,考虑另一个维护您的代码的人:在代码块中查看join()就不那么明显了,因此他们会发现在没有注释的情况下看到forkJoinPool.shutdownNow();是很奇怪的,并且shutdown()更清楚地表明池处理的结束已经完成。
final ForkJoinPool forkJoinPool = new ForkJoinPool(...);
try {
// Long block:
// harder to spot join() here whereas shutdown() stands out
} finally {
forkJoinPool.shutdown();
}https://stackoverflow.com/questions/70934558
复制相似问题