java的守护线程和非守护线程区别_java守护线程应用场景

java的守护线程和非守护线程区别_java守护线程应用场景一、守护线程    java分为两种线程:用户线程和守护线程    守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。    守护线程和用户…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、守护线程

        java分为两种线程:用户线程守护线程

        守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。

        守护线程和用户线程的基本没什么本质的区别,唯一的不同之处就在于虚拟机的离开。如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。

例如: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于
实时监控和管理系统中的可回收资源。

        将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点:

  • (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常,不能把正在运行的       常规线程设置为守护线程。
  • (2) 在Daemon线程中产生的新线程也是Daemon的。
  • (3) 守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。

补充说明:
定义:守护线程–也称“服务线程”,在没有用户线程可服务时会自动离开。
优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
设置:通过setDaemon(true)来设置线程为”守护线程”,将一个用户线程设置为守护线程的方式是在线程对象创建之前用线程对               象的setDaemon方法。
生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。Java的守护线程是当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。

二、守护线程使用场景

    守护线程的典型代表是垃圾回收,这是很多人说守护进程非常有用的理由,但实际上守护进程在用户开发上的应用场景几乎用处不大,可能的应用场景:

  • 内存资源或者线程的管理,但是非守护线程也可以做
  • 守护线程负责一个可以将当前的JVM退出的功能,即将非damon的线程都退出,然后jvm自动退出,感觉用的也非常少,可以直接通知相关线程退出不就可以了,考虑设计上优雅一些,可能有点好处。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181799.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月15日 上午9:46
下一篇 2022年10月15日 上午10:00


相关推荐

  • [DeepSeek] 入门详细指南(上)

    [DeepSeek] 入门详细指南(上)

    2026年3月15日
    1
  • Ajax 跨域,这应该是最全的解决方案了

    Ajax 跨域,这应该是最全的解决方案了

    2021年10月13日
    41
  • 如何更改linux文件的拥有者及用户组(chown和chgrp)[通俗易懂]

    如何更改linux文件的拥有者及用户组(chown和chgrp)[通俗易懂]本文整理自:http://blog.163.com/yanenshun@126/blog/static/128388169201203011157308/http://ydlmlh.iteye.com/blog/1435157一、基本知识在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户。该文件用户可以修改该文件的拥有者及用户组,当然root用户可以修改任何文…

    2022年6月7日
    39
  • 费马小定理题

    费马小定理题费马小定理 假如 p 是质数 且 gcd a p 1 那么 nbsp A 题 HDU 4704 首先是挡板法 隔板法 然后用即可 高中数学范围不多叙述 然后得到答案是 nbsp 这题读入数据大 就算快速幂也肯定 TLE 所以用费马小定理 把数据规模降到 int 范围内 时间复杂度降低因为 1e9 7 是一个素数 基本可以假设 N 1 不是 1e9 7 的倍数 这一点我没想到 所以没写出来 所

    2025年11月16日
    7
  • 经典排序算法(1)——冒泡排序算法详解

    经典排序算法(1)——冒泡排序算法详解冒泡排序(BubbleSort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。一、算法基本思想(1)基本思想冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出

    2022年7月8日
    24
  • python多维list去重「建议收藏」

    python多维list去重「建议收藏」一维的list去重可以用set(list),但是二维的list转set就会报错unhashabletype:‘list’原因是set传进来的是不可哈希的变量Python中那么哪些是可哈希元素?哪些是不可哈希元素?可哈希的元素有:int、float、str、tuple不可哈希的元素有:list、set、dict为什么list是不可哈希的,而tuple是可哈希的(1)因为l…

    2022年5月26日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号