java - 守护线程和低优先级线程的区别

标签 java multithreading

最近有人问我一个问题:

We've got the setPriority() method to set a thread for low priority. Then why do we need a daemon thread. What's the difference between them?

将线程标记为守护进程会改变它的调度吗?

最佳答案

We've got the setPriority() method to set a thread for low priority. Then why do we need a daemon thread. What's the difference between them?

通常,守护线程与优先级无关。当所有用户非守护线程完成时,JVM 关闭。将线程标记为守护线程意味着它可以在 JVM 退出时安全地被杀死。

优先级与调度有关——与其他准备运行的线程相比,一个线程获得时间片的频率。您可以拥有低优先级守护线程或高优先级守护线程。您可以拥有低优先级和高优先级的非守护线程。顺便说一句,线程优先级仅适用于某些特定情况和特定体系结构,作为 Java 线程专家,我从不使用它们。

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

关于何时创建线程守护进程,我将守护线程用于任何我不关心它们是否在 JVM 退出时被中断的任务:保持 Activity 线程、统计处理器、日志处理等。一切应用程序的关键任务是非守护线程,必须特别中断或发出信号以某种方式退出。

关于java - 守护线程和低优先级线程的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298306/

相关文章:

java - 从url java获取 "#"之后的参数

java - 处理在相对布局上的向下拖动

java - Android 布局预览器在添加自定义 LinearLayout 时抛出错误

c++ - 如何在不使用 <mutex> 的情况下在 C++11 中实现多线程安全单例

java - 如何在java中得到这个输出

java - 如何用连续的数字填充数组

java - java中run()方法可以使用synchronized吗?

Python子进程获取 child 的输出

c# - 并行加载到 DataSet 有什么问题吗?

如果任务持续时间超过周期,Java ScheduledThreadPool 将使用额外的线程