2019独角兽企业重金招聘Python工程师标准>>>

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{@Overridepublic 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块中的内容确保执行关闭或者清理资源的逻辑。

转载于:https://my.oschina.net/u/3866531/blog/2247430

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

  1. 《Java并发编程的艺术》笔记

    <Java并发编程的艺术>笔记 第1章 并发编程的挑战 1.1 上下文切换 CPU通过时间片分配算法来循环执行任务,任务从保存到再加载的过程就是一次上下文切换. 减少上下文切换的方法有4种 ...

  2. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  3. 【极客时间】《Java并发编程实战》学习笔记

    目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...

  4. Java并发编程的艺术-阅读笔记和思维导图

    最近在坚持每天阅读<<Java并发编程的艺术>>,不但做好笔记(MarkDown格式),还做好思维导图. 如果大家感兴趣,可以可以到码云上阅读笔记和到ProcessOn上阅读思 ...

  5. JAVA并发编程的艺术-读书笔记

    1.并发编程的挑战 多线程并不一定能带来性能提升,相反过多的线程导致线程创建和上下文切换有时会比单线程性能更低 无锁并发编程:根据数据id进行取模,不同的线程处理不同段的数据 死锁:资源互相等待,线程 ...

  6. [转] 《Java并发编程的艺术》笔记

    转自https://gitee.com/Corvey/note 作者:Corvey 第一章 并发编程的挑战 略 第二章 Java并发机制的底层实现原理 volatile的两条实现原则: Lock前缀指 ...

  7. java并发编程的艺术-学习-1

    第一章 并发编程的挑战 目的:让程序运行更快 并发编程面临的挑战:上下文切换.死锁.硬件和软件的资源限制 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片 ...

  8. 《Java并发编程实战》学习笔记

    什么是并发编程? 跳出来看全局就是3部分:分工.协作.互斥 钻进去看本质:技术的本质就是背后的理论模型 并发理论基础 并发编程产生bug的原因 可见性:cpu缓存导致共享变量在多核cpu的情况下,不可 ...

  9. Java并发编程实战(学习笔记十 第十一章 性能与可伸缩性)

    线程的最主要目的是提高程序的运行性能.线程可以使程序更加充分地发挥系统的可用处理能力,从而提高系统的资源利用率.线程还可以在使程序在运行现有任务的情况下立即开始处理新的任务,从而提高系统的响应性. 本 ...

  10. 《Java并发编程的艺术》——线程(笔记)

    文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...

最新文章

  1. [JavaScript] JavaScript 值类型使用:与数组有关的API
  2. C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...
  3. 导入导出oracle数据库表的dmp文件
  4. 业界资讯:adobe air 2.7 beta发布
  5. MySQL 8.0 安装部署3个注意事项
  6. spring4.x(4)--SpringIOC的HelloWorld
  7. mybatis 自定义转换规则_Mybatis使用小技巧-自定义类型转换器
  8. 诺基亚发布最新研究报告:多角度分析5G服务的投资回报
  9. 开发者如何区分 5G 和 LTE 技术?
  10. 中班音乐计算机反思,幼儿园音乐活动反思10篇
  11. 无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装
  12. 数据分析2——核心思维技巧
  13. APPLE G5 机箱改造“黑苹果”全攻略
  14. Python:实现SCC的Kosaraju算法(附完整源码)
  15. Elasticsearch 7.X 性能优化
  16. 你拥有的最宝贵的财富是什么?
  17. 声网Agora Lipsync技术剖析:通过实时语音驱动人像模拟真人说话
  18. 计算机主板定位孔尺寸,775针主板上四个 CPU散热器固定孔 的孔距 分别是多少...
  19. C++ friend详解
  20. Android实现的电子木鱼,功德+1...

热门文章

  1. 是谁的名字缩写_浅谈女枪 or MF之争 盘点LOL中常见的英雄英文名缩写
  2. ThinkPHP6内核通用网站后台权限管理系统源码
  3. ThinkPHP内核仿美洽多商户多端接入无限客服系统-支持PC+WAP+公众号接入
  4. 计算机专业3d游戏设计,史塔福郡大学3D计算机游戏设计理学硕士研究生申请要求及申请材料要求清单...
  5. Django使用mysql连接池_Django db使用MySQL连接池
  6. NYMEX ACCESS电子交易系统来
  7. Tensorflow并行计算:多核(multicore),多线程(multi-thread),计算图分割(Graph Partition)
  8. urllib2的Post和Get请求
  9. Linux cp命令:复制文件和目录
  10. 【AI视野·今日CV 计算机视觉论文速览 第156期】Mon, 9 Sep 2019