定义

Java 中有两种线程: 一种是用户线程(User Thread),一种是守护线程(Daemon Thread)。

守护线程是一种特殊的线程, 它的特殊有“陪伴”的含义, 当线程中不存在非守护线程时, 则守护线程自动销毁。

垃圾回收线程就是一种守护线程, 当线程中没有非守护线程了, 则垃圾回收线程就会自动销毁。

因此, 守护线程的作用就是为其他非守护线程的线程服务, 当非守护线程不存在时, 其自然就没有存在的必要了。

如何创建

创建过程与一般的线程一样, 只需要在创建完之后调用如下函数即可:

setDaemon(true);

判断

public final boolean isDaemon() {

return daemon;

}

可以通过该函数判定一个线程是否为守护线程。

注意事项

函数setDaemon(true)必须在 start() 函数之前使用。

如 setDaemon(true) 在 start() 之后, 就会抛异常。如下

也就是说, 在线程运行之后, 其类型(守护与否)就已经确定了, 无法更改。

守护线程中产生的线程也是守护线程;

在 Thread 的 init() 函数中, 可以看到这么一句:

this.daemon = parent.isDaemon();

测试

创建一个线程类

class PrimeThread extends Thread {

@Override

public void run() {

System.out.println(Thread.currentThread().getName()+" begin");

try {

int i = 0;

while(true) {

Thread.sleep(500);

System.out.println("Current i = " + (i++));

}

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()+" end");

}

}

创建测试方法

public static void main(String[] args) {

PrimeThread primeThread = new PrimeThread();

primeThread.setDaemon(true);

primeThread.start();

try {

Thread.sleep(3000L);

System.out.println("Main 函数准备结束了, 守护线程也机会停止, 不打印");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

结果如下:

结果中, Main 函数的线程结束后, primeThread 线程也随之结束了。

java的线程的daemon_Java 多线程(四)之守护线程(Daemon)相关推荐

  1. Java Executor源码解析(7)—Executors线程池工厂以及四大内置线程池

    详细介绍了Executors线程池工具类的使用,以及四大内置线程池. 系列文章: Java Executor源码解析(1)-Executor执行框架的概述 Java Executor源码解析(2)-T ...

  2. 深入多线程九:守护线程(代码示例)

    在学习Java的道路上,是否路过多线程时总让你很迷惘:很不巧,我也是,而使我们感到很迷惘主要原因都源于没有对概念的深深的理解和实践.所以我决定漫步Java多线程,同你一起会会多线程. 深入多线程系列 ...

  3. java中什么是线程安全_Java 多线程:什么是线程安全性

    线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...

  4. Java基础 - 坦克大战(第四章,线程基础)

    文章目录 线程终止 基本说明 案例 线程常用方法1 细节 线程常用方法2 礼让(yield) 插队(join) 案例 线程常用方法3 用户线程和守护线程 用户线程 守护线程 常见的守护线程(垃圾回收机 ...

  5. java 线程通讯_java多线程(五)线程通讯

    1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...

  6. java线程组 线程池_JAVA多线程(三)-----线程组、线程池和线程相关类

    一.线程组和未处理的异常 Thread类提供了如下几个构造器来设置新创建的线程属于哪个线程组: Thread(ThreadGroup group,Runnable target):以target的ru ...

  7. java 两个线程同步_Java 多线程(二)—— 线程的同步

    实现Runnable接口 public classTestThread2 {public static voidmain(String [] args){ Window window=newWindo ...

  8. terminated 线程_Java【多线程系列】JUC线程池—2. 原理(二)、Callable和Future

    在"Java多线程系列--"基础篇"01之 基本概念"中,我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而 ...

  9. i5四核八线程怎么样_英特尔处理器是六核六线程好,还是四核八线程好?

    英特尔的六核心六线程会更好,因为,四核心八线程处理器是英特尔的二代.三代.四代.六代.七代的i7处理器的规格.而六核心六线程是最新的英特尔八代才有的规格.目前六代.七代i7的价格居高不下,根本没有性价 ...

  10. i5四核八线程怎么样_同样四核八线程,Ryzen 3 3100和3300X区别大了!

    AMD在21号晚上发布了Ryzen 3 3100和Ryzen 3 3300X两款主流级处理器,正好对位英特尔即将在月底发布的Core i3-10100和Core i3-10300.除了频率差别之外,这 ...

最新文章

  1. java 6 jaxb_JAVA6开发WebService (五)—— JAXB
  2. hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解
  3. c3p0连接池的配置和简单使用
  4. 爬虫爬评书吧_200行代码实现一个有声听书网爬虫下载器
  5. 远程会议总卡顿?8 个“小白”办法一看就会!
  6. SQL Server数据库镜像下有效的索引维护
  7. pg数据库中两个字段相除
  8. 深度学习基础之三分钟轻松搞明白tensor到底是个啥!看不懂的话我倒立洗头~~
  9. 力扣第 295 场周赛:6080. 使数组按非递减顺序排列
  10. iFunk翼S苏宁京东热卖进行中
  11. Scratch精通之侦测的使用
  12. 计算机中常用t来表示,2012年计算机等级考试一级B考点详解(4)
  13. C语言两分钟倒计时小程序
  14. IaaS PaaS SaaS 读音及含义
  15. 如何制作一寸、二寸、六寸证件照片
  16. legacy引导gpt分区_支持win10的传统legacy启动无损转换为UEFI GPT启动
  17. 基于人脸识别和瞳孔检测的屏幕亮度自适应调节装置
  18. 英国脱欧或利好中国光伏企业
  19. 从失败中崛起!52岁斯皮尔曼,曾携华人科学家2次斩获哥德尔奖
  20. Android中Manifest.xml配置文件

热门文章

  1. linux常用解压命令总结
  2. 利用runtime给分类添加属性
  3. python基础——使用list和tuple
  4. Flexbox属性介绍
  5. struts2与json的整合
  6. $emit和$on用法深挖
  7. linux安装snmp显示乱码_Linux安装X Window服务——远程显示GUI
  8. win10右下角的天气怎么关闭
  9. centos7安装mysql5.7.16_centos7.x编译安装mysql5.7.16
  10. php中curl的用法