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. 知识增强的预训练语言模型系列之ERNIE:如何为预训练语言模型注入知识

    NLP论文解读 |杨健 论文标题: ERNIE:Enhanced Language Representation with Informative Entities 收录会议:ACL 论文链接: ht ...

  2. uniapp解决测评有组件导出风险,解决APP反编译,回编译后app无法打开的问题

    1.APP反编译 使用hbx云打包,打包出apk 拿到apk后,先下载反编译工具 https://pan.baidu.com/s/1A5D8x_pdSELlHYl-Wl6Xnw 提取码 6vzd 使用 ...

  3. 自动化集成:Pipeline整合Docker容器

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述流水线集成Docker用法. 一.背景描述 微服务架构 ...

  4. 如何在Eclipse中搭建MyBatis基本开发环境?(使用Eclipse创建Maven项目)

    实现要求: 在Eclipse中搭建MyBatis基本开发环境. 实现步骤: 1.使用Eclipse创建Maven项目.File >> New >> Maven Project ...

  5. Roslyn+T4+EnvDTE项目完全自动化(3) ——生成c++代码

    C++语法复杂,写一个示例通过T4可生成c++代码 需求:数据库,生成c++增,删,改,查代码 数据生成c++类,包含所有字段 自动识别数据的主键Key 查询生成赋值类字段,类型转换 通过类自动生成s ...

  6. 使用.NET 6开发TodoList应用(17)——实现数据塑形

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在查询的场景中,还有一类需求不是很常见,就是在前端请求中指定返回的字段,所以关于搜索的最后一个主题我们就来演示一下关于数据塑形 ...

  7. .net core使用rabbitmq消息队列

    看博文的朋友,本文有些过时了,还有些BUG,如果想了解更多用法,看看这篇吧:.net core使用rabbitmq消息队列 (二) 首先,如果你还没有安装好rabbitmq,可以参考我的博客: Ubu ...

  8. 欢迎收看 Flink Forward Asia 2021 峰会直播

    在线收看地址:https://developer.aliyun.com/special/ffa2021/live#?utm_content=g_1000316459 Flink 是由 Apache 软 ...

  9. python pathlib模块(面向对象的文件系统路径)

    该模块提供表示文件系统路径的类,其语义适用于不同的操作系统 导入Path类: 获取当前目录的绝对路径: 返回当前目录的路径对象 路径拼接 os与PurePath/Path函数映射表 来自为知笔记(Wi ...

  10. Windwos上Mysql突然出现系统错误3,找不到系统路口

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6540869188678844935/ 问题出现: 调试系统时,突然发现数据库连接不上了,打开界面工具也发现连接不上 ...