文档章节

Daemon线程--《Java并发编程的艺术》学习笔记

k
 karma123
发布于 2018/10/16 22:44
字数 393
阅读 8
收藏 2

daemon线程即守护线程

当一个JVM中不存在非Daemon线程时,JVM将会退出

也就是说当非Daemon线程都执行完毕时,java程序也就结束了。

可以通过调用Thread.setDaemon(true)将线程设置为Daemon线程。而且必须在线程启动之前进行设置

Daemon属性需要在线程启动之前设置,也就是线程执行start()方法之前设置。不能在线程启动之后设置,那样做是无效的。

示例代码

源码

import java.util.concurrent.TimeUnit;

public class DaemonTest {
    public static void main(String[] args) {
        Thread thread = new Thread(new DaemonRunner(),"DaemonRunner");
        thread.setDaemon(true);
        thread.start();
    }

    static class DaemonRunner implements Runnable{
        @Override
        public void run() {
            try{
                TimeUnit.SECONDS.sleep(10);
            }catch (InterruptedException e){
                System.out.println("Setp into InterruptedException.");
            } finally {
                System.out.println("DaemonThread finally run.");
            }
        }
    }
}

分析:运行代码控制台输出为空,为何?

程序运行,main线程中启动了Daemon线程,然后main线程马上就结束了,此时JVM中已经没有非Daemon线程了,所以JVM退出了。JVM中的所有Daemon线程也都需要立即终止,即使finally块中的内容还没有打印,DaemonRunner线程也终止了。

构建Daemon线程时,不能依靠finally块中的内容确保执行关闭或者清理资源的逻辑。

© 著作权归作者所有

共有 人打赏支持
k
粉丝 7
博文 88
码字总数 65057
作品 0
丰台
私信 提问
加载中

评论(2)

k
karma123

引用来自“影月peter”的评论

一定要打印可以考虑用ShutdownHook
谢谢,研究一下:)
影月peter
影月peter
一定要打印可以考虑用ShutdownHook
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
8
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
0
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
1
0
day23:curl判断网站状态码|打包压缩家目录小于5k文件|

1、写一个shell 脚本,通过curl -l 返回的状态码来判断访问的网站是否正确(状态码为 200 则正常); 首先如何过滤出来 状态码了; curl -I http://www.yuanhh.com/index.php 2>/dev/null|head...

芬野de博客
昨天
1
0
从 for of 聊到 Generator

你能学到什么 对 for of 更深入的理解 iterator 到底是何方神圣? 数组也是对象,为什么不能用 for of 来遍历对象呢? 如何实现对象的 for of? Generator 又是何方神圣? Generator 有什么用呢...

Jack088
昨天
3
0
怎么判断go-sql-driver 安装成功

.下载安装   执行下面两个命令:     下载:go get github.com/Go-SQL-Driver/MySQL     安装:go install github.com/Go-SQL-Driver/MySQL   怎么判断go-sql-driver 安装成功 ...

dragon_tech
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部