java中的守护程序线程是一个服务提供程序线程,它为用户线程提供服务。 它的生命依赖于用户线程,即当所有用户线程都死掉时,JVM会自动终止该线程。

有许多java守护程序线程自动运行,例如 gcfinalizer

通过在命令提示符下键入jconsole来查看所有详细信息。 jconsole工具提供有关已加载类,内存使用情况,运行线程等的信息。

Java中的守护程序线程的要点

  • 它为用户线程提供后台支持任务的服务。它在生命中没有为服务用户线程而发挥作用。
  • 它的生命取决于用户线程。
  • 它是一个低优先级的线程。

如果没有用户线程,为什么JVM会终止守护程序线程?

守护程序线程的唯一目的是它为用户线程提供后台支持任务的服务。 如果没有用户线程,为什么JVM要继续运行这个线程?这就是为什么JVM在没有用户线程的情况下终止守护进程线程的原因。

Thread类的Java守护程序线程的方法

java.lang.Thread类为java守护程序线程提供了两种方法。

编号 方法 描述
1 public void setDaemon(boolean status) 用于将当前线程标记为守护程序线程或用户线程。   
2 public boolean isDaemon() 用于检查当前是守护进程。

Java中守护程序线程的简单示例

文件:TestDaemonThread1.java

package com.example.thread;

public class TestDaemonThread1 extends Thread {
public void run() {
if (Thread.currentThread().isDaemon()) {// checking for daemon thread
System.out.println("daemon thread work");
} else {
System.out.println("user thread work");
}
} public static void main(String[] args) {
TestDaemonThread1 t1 = new TestDaemonThread1();// creating thread
TestDaemonThread1 t2 = new TestDaemonThread1();
TestDaemonThread1 t3 = new TestDaemonThread1(); t1.setDaemon(true);// now t1 is daemon thread t1.start();// starting threads
t2.start();
t3.start();
} }

输出

daemon thread work
user thread work
user thread work
注意: 如果要将用户线程设置为守护进程,则不能启动它,否则将抛出IllegalThreadStateException
package com.example.thread;

class TestDaemonThread2 extends Thread {
public void run() {
System.out.println("Name: " + Thread.currentThread().getName());
System.out.println("Daemon: " + Thread.currentThread().isDaemon());
} public static void main(String[] args) {
TestDaemonThread2 t1 = new TestDaemonThread2();
TestDaemonThread2 t2 = new TestDaemonThread2();
t1.start();
t1.setDaemon(true);// will throw exception here
t2.start();
}
}

执行出现异常

Exception in thread "main" Name: Thread-0
Daemon: false
java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Unknown Source)
at com.yiibai.TestDaemonThread2.main(TestDaemonThread2.java:13)

https://www.yiibai.com/java_multithreading/daemon-thread.html

JAVA多线程学习六-守护线程的更多相关文章

  1. Java多线程学习(四)---控制线程

    控制线程 摘要: Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程的执行 1. join线程控制,让一个线程等待另一个线程完成的方法 2. 后台线程,又称为守护线程 ...

  2. java多线程系列六、线程池

    一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池. 2. 使用线程池的好处 a) 降低资源的消耗.使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任 ...

  3. Java多线程学习笔记之一线程基础

    1.进程与线程 1.1 进程:是正在运行中的程序的实例,一个运行中idea就是一个进程.进程有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region)和 ...

  4. JAVA多线程提高六:java5线程并发库的应用_线程池

    前面我们对并发有了一定的认识,并且知道如何创建线程,创建线程主要依靠的是Thread 的类来完成的,那么有什么缺陷呢?如何解决? 一.对比new Threadnew Thread的弊端 a. 每次ne ...

  5. Java多线程编程之守护线程

    Java的线程分为两种,一个是用户线程,一个是守护线程.守护线程守护的对象就是用户线程,当用户线程结束后,守护它的守护线程也就会结束.二者的本质基本是一样的,唯一区别在于何时结束. 用户线程:直到自己 ...

  6. java 多线程8(守护线程)

    比如:后台偷偷运行的那些,qq下载更新包 如果一个进程中只剩下了守护线程,那么守护线程也会死亡.. 一个线程默认都不是守护线程. 判断是否是守护线程:例:d.isDaemon(); 当一个线程随着你的 ...

  7. java多线程(六)线程控制类

    1.   多线程控制类 为了保证多线程的三个特性,Java引入了很多线程控制机制,下面介绍其中常用的几种: l  ThreadLocal l  原子类 l  Lock类 l  Volatile关键字 ...

  8. java多线程学习-同步之线程通信

    这个示例是网上烂大街的,子线程循环100次,主线程循环50次,但是我试了很多次,而且从网上找了很多示例,其实多运行几次,看输出结果并不正确.不知道是我转牛角尖了,还是怎么了.也没有大神问,好痛苦.现在 ...

  9. Java多线程(六)——线程让步

    一.yield()介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其它 ...

随机推荐

  1. 看完这篇 Linux 权限后,通透了!

    我们在使用 Linux 的过程中,或多或少都会遇到一些关于使用者和群组的问题,比如最常见的你想要在某个路径下执行某个指令,会经常出现这个错误提示 . permission denied 反正我大概率见 ...

  2. 利用数学软件Mathematica的三维图像进行建模

    前言 最近在使用Mathematica进行二元函数的图像绘制,在导出图像选项中看到了obj,maya等三维格式.其实很早之前我就有过这样的想法,但之前使用的是matlab作图,无法导出三维格式.那么废 ...

  3. 基于Java swing+mysql+eclipse的【图书管理系统】

    本项目为Java swing项目,在工作环境中基本使用不到,但是很多学校把这个当做编程入门的项目来做,故分享出本项目供初学者参考. CSDN赞助下载:https://download.csdn.net ...

  4. Spring第一个程序

    目录 1.利用Maven导入jar包 2.编写一个实体类 3.编写Spring文件 4.测试 1.利用Maven导入jar包 <dependency> <groupId>org ...

  5. js 表格操作 全选和反选效果 案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. Microsoft HoloLens 开发(3): 全息图交互方式 - Gaze

    Gaze(凝视) 是 HoloLens 交互输入的第一种形式,告诉你 用户 在世界上的位置,并让你确定他们的意图. 1.Gaze的用途 作为一个 Mixed Reality 开发者,Gaze 可以做很 ...

  7. TypeScript 中文教程之缩小----部分翻译自TS官方

    Narrowing概念:字面意思是缩小,可以理解为细化或者您觉得更好的代名词. TS官方在这里做了很详细的说明,文字较多,简单以图片概括: typeof  type guards 类型防护过程,可以通 ...

  8. cnetos7安装字体

    1 先下载字体 链接:https://pan.baidu.com/s/1FEV7K8c8S6o3gBukkSGp4w 提取码:font 2 安装字体脚本 vi font.sh #!/bin/bash ...

  9. mysql 的 limit 与sql server 的 top n

    1.东西学多了,难免会混淆 貌似没有错,但是mysql不支持 top n 语法 而是使用 limit n 或 limit n , m 2.   top n 语法 是SQL server 的

  10. antd-vue中的form表单label标签for导致点击文字触发输入框解决方案

    <a-form-item :label="label+'图片'" :label-col="{ span: 2 }" :wrapper-col=" ...