Java 多线程(四)之守护线程(Daemon)
@
定义
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 Thread)
在正式理解这个概念前,先把 守护线程 与 守护进程 这二个极其相似的说法区分开,守护进程通常是为了防止某些应用因各种意外原因退出,而在后台独立运行的系统服务或应用程序. 比如:我们开发了一个邮件发送程 ...
- java多线程(四)-自定义线程池
当我们使用 线程池的时候,可以使用 newCachedThreadPool()或者 newFixedThreadPool(int)等方法,其实我们深入到这些方法里面,就可以看到它们的是实现方式是这样的 ...
- Java多线程编程之守护线程
Java的线程分为两种,一个是用户线程,一个是守护线程.守护线程守护的对象就是用户线程,当用户线程结束后,守护它的守护线程也就会结束.二者的本质基本是一样的,唯一区别在于何时结束. 用户线程:直到自己 ...
- java 多线程8(守护线程)
比如:后台偷偷运行的那些,qq下载更新包 如果一个进程中只剩下了守护线程,那么守护线程也会死亡.. 一个线程默认都不是守护线程. 判断是否是守护线程:例:d.isDaemon(); 当一个线程随着你的 ...
- JAVA多线程学习六-守护线程
java中的守护程序线程是一个服务提供程序线程,它为用户线程提供服务. 它的生命依赖于用户线程,即当所有用户线程都死掉时,JVM会自动终止该线程. 有许多java守护程序线程自动运行,例如 gc,fi ...
- JAVA并发编程——守护线程(Daemon Thread)
在Java中有两类线程:用户线程 (User Thread).守护线程 (Daemon Thread). 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称 ...
- JAVA - 守护线程(Daemon Thread)
转载自:http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 在Java中有两类线程:用户线程 (User Thread) ...
- [19/04/08-星期一] 多线程_线程的优先级(Priority) 和 守护线程(Daemon)
一.概念 1. 处于就绪状态的线程,会进入“就绪队列”等待JVM来挑选. 2. 线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5. 3. 使用下列方法获得或设置线程对象的优先级. in ...
- 【多线程】守护线程 Daemon
守护线程 Daemon 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如,后台记录操作日志,监控内存,垃圾回收等待.. 代码示例: /** * @Desc ...
- Java多线程(一) —— 线程的状态详解
一.多线程概述 1. 进程 是一个正在执行的程序.是程序在计算机上的一次运行活动. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 系统以进程为基本单位进行系统资源的调度 ...
随机推荐
- Ionic模版的使用
Hybird HTML5 App(移动应用开发)之4.Ionic模版的使用 在Windows系统下使Ionic模版,可以使用之前安装的Git工具中的Git Bash.在Mac系统中可以直接使用系统自带 ...
- Python邮件发送源码
-- coding:utf-8 -- i = 0 while i < 10: #发送十次 import smtplib from email.mime.text import MIMEText ...
- CheckTimeWait.bat实现windows下的TimeWait检查
原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=c7bff196-cd9c- ...
- 【汇编】SI DI 的用法
一.汇编语言中,为什么SI和DI不能同时使用汇编 其实你可以想一下,这两个寄存器的意思,SI源变址寄存器,DI目地变址寄存器,既然是变址寄存器,那么他们肯定是在某个地址的基础上进行偏移变化,由此我们就 ...
- pycharm 中脚本执行的3种模式
https://blog.csdn.net/chenmozhe22/article/details/81700504
- MySQL数据库的安装与基本操作
实验要求: 1.安装mysql源码包,并做相关的配置和优化路径,启动服务. 步骤: 1)先查询MySQL软件的安装情况,如果有建议将其卸载, 2)安装光盘自带的ncurses-devel包. 3)My ...
- 读高性能JavaScript编程 第二章 让我知道了代码为什么要这样写
代码为什么要这样写? function initUI(){ var doc = document, bd = doc.body, links = doc.getElementsByTagName_r( ...
- Javaweb学习(三):Servlet程序
好了,既然开发环境已经配置好了.那么我们首先要搞定得便是servlet了,至于为什么不先去研究jsp,这是因为jsp与servlet本就是一体两面,jsp其本身经过编译.载入.转化等步骤最终会成为se ...
- 服务器上u盘装机centos7.2
说明: 截止目前CentOS 7.x最新版本为CentOS 7.2.1511,下面介绍CentOS 7.2.1511的具体安装配置过程 服务器相关设置如下: 操作系统:CentOS 7.2.1511 ...
- 使用PhotoShop将视频转为gif格式
由于文档中不方便上传视频,尤其是一些短视频,将其制作成gif格式更便于浏览,刚好PhotoShop中有这种功能,笔者在这里分享一下. 在PS中打开需要转换格式的视频文件,选择文件选项导出中的导出为We ...