首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ForkJoinPool::停工与ForkJoinPool:shutdown ForkJoinPool::join::join join::join::join join之后关闭

ForkJoinPool::停工与ForkJoinPool:shutdown ForkJoinPool::join::join join::join::join join之后关闭
EN

Stack Overflow用户
提问于 2022-02-01 00:53:37
回答 1查看 202关注 0票数 1

代码:

代码语言:javascript
复制
            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只从输入列表中读取。

EN

回答 1

Stack Overflow用户

发布于 2022-02-02 09:35:09

通常:shutdown();意味着您正在为executor服务执行干净/有序的关闭操作,而在特定情况下使用的shutdownNow();通常用于错误处理或绕过任何未启动和不太重要的后台服务。

在您的情况下,使用join()时不会有任何不同。但是,考虑另一个维护您的代码的人:在代码块中查看join()就不那么明显了,因此他们会发现在没有注释的情况下看到forkJoinPool.shutdownNow();是很奇怪的,并且shutdown()更清楚地表明池处理的结束已经完成。

代码语言:javascript
复制
final ForkJoinPool forkJoinPool = new ForkJoinPool(...);
try {
    // Long block:
    // harder to spot join() here whereas shutdown() stands out
} finally {
    forkJoinPool.shutdown();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70934558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档