1.11守护线程

在Java中有两种线程,一种为用户线程,一种为守护线程。

守护线程是一种特殊的线程,它具有“陪伴”的含义,当进程中不存在非守护线程时,则守护线程自动销毁。

典型的守护线程就是垃圾回收线程。

当进程中没有线程了,则垃圾回收线程也就没有存在的必要了,自动销毁。

任何一个守护线程,都是JVM中所有的非守护线程的保姆,只要当前JVM实例中存在任何一个非守护线程,且没有结束,守护线程就在工作,只有当最后一个非守护线程结束时,守护线程才随着JVM一同结束工作。

Daemon的作用就是为其他线程运行提供便利,守护线程最典型的应用就是GC。

线程代码:

public class Thread1 extends Thread {
    private int i = 0;

    @Override
    public void run() {
        try {
            while (true) {
                i++;
                System.out.println("i = " + i);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

执行代码:

public class Main {
    public static void main(String[] args) {
        try {
            Thread1 thread = new Thread1();
            thread.setDaemon(true);
            thread.start();
            Thread.sleep(5000);
            System.out.println("main线程停止了,则守护线程也停止了。不在打印。");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

执行结果:

随着主线程停止了工作,守护线程随即也停止了工作。

源码地址:https://github.com/lilinzhiyu/threadLearning

本文内容是书中内容兼具自己的个人看法所成。可能在个人看法上会有诸多问题(毕竟知识量有限,导致认知也有限),如果读者觉得有问题请大胆提出,我们可以相互交流、相互学习,欢迎你们的到来,心成意足,等待您的评价。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2019/03面试题-并发为主

      实现interface Runnable的run()  继承class Thread override run()  使用FutureTask的方式(此方式...

    用户1134788
  • java多线程编程核心技术——第一章总结 1.5sleep()方法

    1.1进程、多线程的概念及线程的优点 进程的概念: 百度百科讲解: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和...

    用户1134788
  • java多线程编程核心技术——第三章总结

    第一节等待/通知机制 1.1不使用等待/通知机制实现线程间的通讯 1.2什么是等待/通知机制 1.3等待/通知机制的实现 1.4方法wait()锁释放与noti...

    用户1134788
  • 线程池的设计原理是什么?

    线程池相关的知识点是面试中非常高频的问题,掌握线程及线程池相关的知识点也是程序员向高段位进阶的必由之路。由于线程池涉及线程、并发、编程语言内存模型等多方面的知识...

    用户5927304
  • Dubbo线程模型

    dubbo线程模型包括线程模型策略和dubbo线程池策略两个方面,下面就依次进行分析。

    luoxn28
  • 「JAVA」线程生命周期分阶段详解,哲学家们也深感死锁难解

    每个事物都有其生命周期,也就是事物从出生开始到最终消亡这中间的整个过程;在其整个生命周期的历程中,会有不同阶段,每个阶段对应着一种状态,比如:人的一生会经历从婴...

    老夫编程说
  • 线程的生命周期

    线程的六种状态: NEW、RUNNABLE、BIOCKED、WAITING、TIME_WAITING、TERMINATED。

    用户7386338
  • 「JAVA」线程生命周期分阶段详解,哲学家们深感死锁难解

    每个事物都有其生命周期,也就是事物从出生开始到最终消亡这中间的整个过程;在其整个生命周期的历程中,会有不同阶段,每个阶段对应着一种状态,比如:人的一生会经历从婴...

    老夫编程说
  • 没想到,这么简单的线程池用法,深藏这么多坑!

    生产有个对账系统,每天需要从渠道端下载对账文件,然后开始日终对账。这个系统已经运行了很久,前两天突然收到短信预警,没有获取渠道端对账文件。

    andyxh
  • Java 线程池中的线程复用是如何实现的?

    那么就来和大家探讨下这个问题,在线程池中,线程会从 workQueue 中读取任务来执行,最小的执行单位就是 Worker,Worker 实现了 Runnabl...

    用户1516716

扫码关注云+社区

领取腾讯云代金券