首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >奇怪的ForkJoinPool行为

奇怪的ForkJoinPool行为
EN

Stack Overflow用户
提问于 2015-03-24 16:02:08
回答 1查看 586关注 0票数 3

Java8流和并行流使用ForkJoinPool.commonPool,这是一个通用的池(理论上可以保持机器上的CPU数量一样多)用于短任务.

我正在使用一些java8特性,我注意到池只保留一个线程,并且不断地杀死和替换它.

如果我选择只看到活线程,我将只有一个线程在池中.

,所以问题是为什么池总是替换线程?为什么不重用它呢?这是正常的行为吗?(如果是,为什么?)

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 16:18:00

我不认为你的推论是正确的。池有X个线程数。假设它从5个线程开始。现在将有5个处于空闲状态的线程。如果您将其工作,它将把一个线程进入活动状态,然后一旦工作完成,它会回到空闲。如果池是由队列支持的,那么首先拉出的线程是Thread0,然后是池的后面,池使用其他4个线程,只有这样,Thread0才会再次被使用。这是它在你的图表中显示的图案。您只看到一个线程活动的原因可能是您的工作太短,线程完成后在下一个线程启动之前返回到空闲状态。

编辑

代码:它创建一个LIFO队列,如果无法确定其他属性/核数,则使用1个线程。根据启动应用程序的方式,它可能会导致一些意想不到的行为,但不能确定这一点,因为我不知道您的系统或应用程序。上面的答案只是解释线程池的工作方式,并且您在第一个映像中显示的模式可以根据这个解释来理解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29237418

复制
相关文章

相似问题

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