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. [erlang]proc_lib源码浅析
  2. c++用一级运算比较大小_1.1.2 python基本数据类型与运算符
  3. 学习springboot基础必备
  4. 从东岳流体下载自带OpenFOAM的Vmware虚拟机(Ubuntu20.04+OpenFOAM),无法共享文件夹【终极解决方案】
  5. Linux7安装gi报错,Redhat 7.6安装11G RAC GI时遇到此类报错
  6. 100个最古老互联网域名 最久只有23年(附名单)
  7. 在Windows Server 2008中安装Exchange Server 2007 SP1
  8. Linux的安装及忘记Linux密码的措施
  9. poj 2754 Similarity of necklaces 2
  10. V.Replication and Sharding(创建主从数据库)
  11. matlab中phantom函数,matlab官网上下的phantom3d不对
  12. gnu stubs arch linux,编译Nachos源代码时出错“gnu/stubs-32.h:没有这样的文件或目录”...
  13. mysql如何设置host_如何快速修改MySQL用户的host属性
  14. java学习之springcloud之服务注册与发现篇
  15. 怎样在VS中用C++调用METIS提供的API
  16. c语言编程a4988驱动步进电机,A4988步进电机单片机驱动程序
  17. HDU - 1431 素数回文 【素数打表】+【判断回文】
  18. Kinetics-400数据集下载
  19. 如何查看MySql的安装位置?
  20. 一图了解英特尔® 超能云终端的12个问题!

热门文章

  1. mysql 性能拐点_性能压测及分析调优实践
  2. python怎么运行yaml配置文件_cfg4py:一个严肃的Python配置模块应有的风格
  3. DHPST分销系统 YEP分销云主机分销系统源码
  4. 相片堆叠瀑布流网格布局动画效果
  5. access month函数用法_小白进阶必备的10组函数公式实用技巧解读,有案例和详情解读哦!...
  6. TabControl与UserControl合伙吃内存
  7. 使用Response.Filter过滤非法词汇
  8. Bootstrap 3: 图标转换事件 Change icons when toggle
  9. 利用HTML5中Geolocation获取地理位置在Google Map上定位
  10. 重磅资料!Github上的PHP资源汇总大全