守护程序线程和低优先级线程之间的区别

Ash*_*Ash 8 java multithreading

最近我被问到一个问题:

我们有了setPriority()设置低优先级线程的方法.那为什么我们需要一个守护程序线程.他们之间有什么区别?

将线程标记为守护进程是否会更改其调度?

Gra*_*ray 21

我们有setPriority()方法来设置低优先级的线程.那为什么我们需要一个守护程序线程.他们之间有什么区别?

通常,守护程序线程与优先级无关.所有用户非守护程序线程完成后,JVM将关闭.将线程标记为守护程序线程意味着可以在JVM退出时安全地终止它.

优先级是关于调度 - 关于线程获得时间片的频率与准备运行的其他线程相比.您可以拥有低优先级守护程序线程或高优先级守护程序线程.您可以拥有低优先级和高优先级的非守护程序线程.顺便说一下,线程优先级仅适用于某些特定情况,当然也适用于架构和Java线程专家,我从不使用它们.

这些概念是正交的(相互独立的) - 至少在Java线程模型中是这样.

关于何时制作线程守护进程,我使用守护进程线程来处理任何我不关心的任务,如果它们在JVM退出时被中断:保持活动线程,统计处理器,日志处理等等.一切任务至关重要应用程序是一个非守护程序线程,必须特别中断或发出信号才能以某种方式退出.