Java并发编程之守护线程(短文)

Java多线程中有一种线程叫做守护线程。我们可以通过一个比喻来理解守护线程。通常,一般工厂都会聘请一批保安,保安的职责是维护工厂的治安,保护工厂的财产,保安的职责就是守护工厂。但是,假如工厂倒闭了, 那么保安也就没有必要存在了。

保安相对于工厂,从某种程度上看就是守护线程相对于Java程序。假如有一条守护线程在一个Java程序中运行,如果程序的主线程退出,那么不管守护线程有没有执行完毕,也会跟随主线程一同退出。

创建守护线程只需要在创建普通线程的基础上调用setDaemon方法, 并设置唯一的参数为true即可。

public class Main { public static void main(String[] arg) { Thread thread = new Thread(newRunnable() { @Override public void run() { while(true); } }); thread.setDaemon(true); thread.start(); } }

上面代码的线程中, 虽然有一个while无限循环,但是随着程序执行的结束,这个线程也会跟谁着一同被终止。 如果把setDaemon方法的调用去掉或者参数设置为false,那么程序将陷入空转,永远不会自行结束。

注意,setDaemon 方法必须在调用start方法前调用,否则会抛出运行时异常

Exceptionin thread "main" java.lang.IllegalThreadStateException

另外,在守护线程中被启动的线程,天生就是守护线程,无法更改,setDaemon方法对它是无效的。

基于守护线程的这中依附于主线程生命周期的特性,在守护线程中不因该去做一些IO操作,如读取文件、访问数据库、发送http请求等,因为在守护线程中总是无法预知,这些操作是否会被完整的执行。

原文发布于微信公众号 - 带你撸出一手好代码(gh_afab56b37671)

原文发表时间:2018-01-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏章鱼的慢慢技术路

网络中TCP、IP、MAC、UDP的头部格式信息

4037
来自专栏架构师小秘圈

分布式之缓存击穿

1665
来自专栏PHP在线

PHP 面试知识梳理

算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

4846
来自专栏我爱编程

运维开发笔试

all(iterable) and any(iterable) all(x)如果all(x)参数x对象的所有元素不为0、''、False或者x为空对象(即所有...

2173
来自专栏java一日一条

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边...

762
来自专栏JAVA技术站

Struts2.3的简单配置使用 原

一、下载Struts2,http://struts.apache.org/development/2.x/

641
来自专栏JAVA技术zhai

干货:Java并发编程必懂知识点解析(内附面试题)

2625
来自专栏haifeiWu与他朋友们的专栏

TCP 粘包问题浅析及其解决方案

最近一直在做中间件相关的东西,所以接触到的各种协议比较多,总的来说有TCP,UDP,HTTP等各种网络传输协议,因此楼主想先从协议最基本的TCP粘包问题搞起,把...

1.1K2
来自专栏菜鸟计划

webpack学习(六)打包压缩js和css

打包压缩js与css 由于webpack本身集成了UglifyJS插件(webpack.optimize.UglifyJsPlugin)来完成对JS与CSS的压...

7056
来自专栏程序员宝库

PHP 面试知识梳理

算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

42512

扫码关注云+社区

领取腾讯云代金券