什么是守护线程?

Java线程分为用户线程和守护线程。

  • 守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。
  • Java中把线程设置为守护线程的方法:在 start 线程之前调用线程的 setDaemon(true) 方法。

注意:

  • setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行
  • 守护线程创建的线程也是守护线程
  • 守护线程不应该访问、写入持久化资源,如文件、数据库,因为它会在任何时间被停止,导致资源未释放、数据写入中断等问题
package constxiong.concurrency.a008;/** * 测试守护线程 * @author ConstXiong * @date 2019-09-03 12:15:59 */public class TestDaemonThread {public static void main(String[] args) {testDaemonThread();}//public static void testDaemonThread() {Thread t = new Thread(() -> {//创建线程,校验守护线程内创建线程是否为守护线程Thread t2 = new Thread(() -> {System.out.println("t2 : " + (Thread.currentThread().isDaemon() ? "守护线程" : "非守护线程"));});t2.start();//当所有用户线程执行完,守护线程会被直接杀掉,程序停止运行int i = 1;while(true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("t : " + (Thread.currentThread().isDaemon() ? "守护线程" : "非守护线程") + " , 执行次数 : " + i);if (i++ >= 10) {break;}}});//setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行t.setDaemon(true);t.start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}//主线程结束System.out.println("主线程结束");}}

执行结果

t2 : 守护线程t : 守护线程 , 执行次数 : 1主线程结束t : 守护线程 , 执行次数 : 2

结论:

  • 上述代码线程t,未打印到t : daemon thread , time : 10,说明所有用户线程停止,进程会停掉所有守护线程,退出程序
  • 当t.start(); 放到t.setDaemon(true); 之前,程序抛出IllegalThreadStateException,t 仍然是用户线程,打印如下
Exception in thread "main" t2 : 非守护线程java.lang.IllegalThreadStateExceptionat java.lang.Thread.setDaemon(Thread.java:1359)at constxiong.concurrency.a008.TestDaemonThread.testDaemonThread(TestDaemonThread.java:39)at constxiong.concurrency.a008.TestDaemonThread.main(TestDaemonThread.java:11)t : 非守护线程 , 执行次数 : 1t : 非守护线程 , 执行次数 : 2t : 非守护线程 , 执行次数 : 3t : 非守护线程 , 执行次数 : 4t : 非守护线程 , 执行次数 : 5t : 非守护线程 , 执行次数 : 6t : 非守护线程 , 执行次数 : 7t : 非守护线程 , 执行次数 : 8t : 非守护线程 , 执行次数 : 9t : 非守护线程 , 执行次数 : 10

给TA打赏
共{{data.count}}人
人已打赏
Java

什么是线程池?

2020-7-31 0:06:40

Java

synchronized锁的升级原理是什么?

2020-7-31 0:10:00

本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
⚠️
本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索