首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ForkJoinPool中的工作线程是守护进程线程吗?

ForkJoinPool中的工作线程是守护进程线程吗?
EN

Stack Overflow用户
提问于 2020-07-22 07:56:56
回答 2查看 990关注 0票数 1

我正在阅读书Java -完整的参考中关于Fork/Join框架的内容。它说ForkJoinPool使用守护进程线程:

ForkJoinPool使用守护进程线程。当所有用户线程都已终止时,守护进程线程将自动终止。因此,不需要显式关闭ForkJoinPool。但是,除了公共池之外,还可以通过调用so ( )来做到这一点。关闭()方法对公共池没有任何影响。

  1. 这是否意味着所有ForkJoinWorkerThread都是守护进程线程?
  2. 既然守护进程线程是低优先级线程,那么我们不应该将ForkJoinPool用于重要的任务?
  3. 如果工作线程不是守护进程线程,那么shutdown()是否等待工作线程完成?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-22 08:53:04

1.

代码语言:javascript
运行
复制
jshell> ForkJoinPool.commonPool().execute(() ->  System.out.println(Thread.currentThread().getClass() + " isDaemon?  " + Thread.currentThread().isDaemon()))
class java.util.concurrent.ForkJoinWorkerThread isDaemon?  true

jshell>

A:是的,它们是守护进程线程。

2.

代码语言:javascript
运行
复制
jshell> new Thread(() -> System.out.println("isDaemon? " + Thread.currentThread().isDaemon() + " priority:" +  Thread.currentThread().getPriority())).start()
isDaemon? false priority:5

jshell> ForkJoinPool.commonPool().execute(() -> System.out.println("isDaemon? " + Thread.currentThread().isDaemon() + " priority:" +  Thread.currentThread().getPriority()))
isDaemon? true priority:5

A:默认情况下,ForkJoinPool创建与任何其他线程具有相同优先级的线程。

3.

来自ForkJoinPool#commonPool的javadoc

返回公共池实例。这个池是静态构造的;它的运行状态不受关闭()或shutdownNow()尝试的影响。然而,这个池和任何正在进行的处理都会在程序System.exit(int)上自动终止。任何在程序终止前依赖异步任务处理来完成的程序都应该在退出之前调用commonPool().awaitQuiescence。

awaitQuiescence​ A:ForkJoinPool忽略关机,但应用程序可以调用以确保所有任务都完成。

票数 3
EN

Stack Overflow用户

发布于 2020-07-22 08:52:15

  1. 不,守护进程线程的优先级与普通线程的优先级相同。此外,您还可以将它们的优先级设置为所需的级别。引用的文章只是建议将守护进程线程用于不太重要的任务,因为它们不能保证在JVM退出时完成它们的工作。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63029461

复制
相关文章

相似问题

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