Java守护线程「建议收藏」

Java守护线程「建议收藏」1、什么是守护线程Java线程分两种:用户线程和守护线程。守护线程,是指在程序运行的时,后台提供一种通用服务的线程。比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没有本质的区别,不同之处在于虚拟机的离开;若用户线程已全部退出运行,只剩守护线程存在,虚拟机也即退出。因没有了被守护者,守护线程也就无工作可做,也

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

Jetbrains全系列IDE稳定放心使用

1、什么是守护线程

Java线程分两种:用户线程和守护线程。

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

守护线程和用户线程的没有本质的区别,不同之处在于虚拟机的离开;若用户线程已全部退出运行,只剩守护线程存在,虚拟机也即退出。 因没有了被守护者,守护线程也就无工作可做,也就没有继续运行程序的必要了。

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

(1)thread.setDaemon(true)须在thread.start()之前设置,不能把正在运行的常规线程设置为守护线程,否则会抛出IllegalThreadStateException异常。

(2) 在Daemon线程中创建的新线程也是Daemon的。

(3) 守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。

(4)java多线程编程,偏向使用java自带的多线程框架,比如ExecutorService,但是java的线程池会将守护线程转换为用户线程,所以如果要使用后台线程就不能用java的线程池。

2、代码示例

守护线程类

import lombok.SneakyThrows;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DaemonRunnable implements Runnable {

    @SneakyThrows
    @Override
    public void run() {
        System.out.println("进入守护线程...");

        Integer count = 0;
        while (true) {
            count++;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = sdf.format(new Date());
            System.out.println("当前:" + time + " | 守护线程进行中,目前计数至【" + count + "】");
            Thread.sleep(1000);
        }

    }
}

测试类

import java.util.Random;

public class DaemonTest {

    public static void main(String[] args) throws InterruptedException {
        // 守护线程在主线程操作完成后就会自动退出,所以不适合进行读写操作
        DaemonRunnable runnable = new DaemonRunnable();
        Thread thread = new Thread(runnable);
        thread.setDaemon(true);
        thread.start();

        Random random = new Random();
        Integer sec = random.nextInt(10);
        System.out.println("警告:" + sec + "秒后主线程退出");
        Thread.sleep(sec * 1000);
        System.out.println("警告:主线程宣告退出!");
    }

}

测试结果

进入守护线程...
警告:8秒后主线程退出
当前:2021-10-09 15:40:00 | 守护线程进行中,目前计数至【1】
当前:2021-10-09 15:40:01 | 守护线程进行中,目前计数至【2】
当前:2021-10-09 15:40:02 | 守护线程进行中,目前计数至【3】
当前:2021-10-09 15:40:03 | 守护线程进行中,目前计数至【4】
当前:2021-10-09 15:40:04 | 守护线程进行中,目前计数至【5】
当前:2021-10-09 15:40:05 | 守护线程进行中,目前计数至【6】
当前:2021-10-09 15:40:06 | 守护线程进行中,目前计数至【7】
当前:2021-10-09 15:40:07 | 守护线程进行中,目前计数至【8】
警告:主线程宣告退出!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 的longtext类型对应java什么类型?

    mysql 的longtext类型对应java什么类型?在mysql的shu数据库中我们存的是小图片的base64位的编码信息。那么在java中对应什么类型呢?`cardPic`longtextCOLLATEutf8mb4_unicode_ciCOMMENT’图片正面’,`cardPic1`longtextCOLLATEutf8mb4_unicode_ciCOMMENT’图片背面’,具体代码查看:https://suxi…

    2022年5月14日
    51
  • Ubuntu下安装vscode_附近有安装etc的吗

    Ubuntu下安装vscode_附近有安装etc的吗目录一、安装VSCode1、VSCode下载2、安装VSCode二、配置C/C++环境1、配置g++环境1.1安装vim1.2安装g++2、安装汉化、C/C++插件3、建立工程4、更改lanuch.json文件5、更改task.json文件6、完美运行我的Ubuntu已经换源了,但是在浏览器中下载比较慢,可以在window中下载好直接拖到虚拟机中。如何在windows和虚拟机Ubuntu中拖拽文件参阅:两行代码实现Windows和…

    2022年9月18日
    0
  • 单片机定时器实验报告C语言,51单片机定时器实验报告.doc

    单片机定时器实验报告C语言,51单片机定时器实验报告.doc51单片机定时器实验报告51单片机定时器实验报告51单片机定时器实验实验内容:实验内容:编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。C语言程序#include#defineuintunsignedint#defineucahrunsignedcharsbitFM=P0^0;voidmain(){TMOD=0x01;TH0=(65535-50000)/256;…

    2022年7月26日
    5
  • linux更改用户名字_linux修改用户id

    linux更改用户名字_linux修改用户idlinux更改用户名的方法是:1、以root身份登录,然后使用下列命令进行修改。“usermod-lNewUser-d/home/NewUser-mOldUser”、“usermod-lalao-d/home/alao-mtom”。2、修改用户名,修改登录后使用的路径,修改登录名称的同时将目录名称一同修改。…

    2022年9月18日
    0
  • OpenCV——Canny边缘检测(cv2.Canny())

    OpenCV——Canny边缘检测(cv2.Canny())Canny边缘检测Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986年,JohnF.Canny发表了著名的论文AComputationalApproachtoEdgeDetection,在该论文中详述了如何进行边缘检测。Canny()边缘检测步骤Canny边缘检测分为如下几个步骤:步骤1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。步骤2:计算梯度的幅度与方向。步骤3:非极大值抑制,即适当地让边缘“变瘦”。步骤4:确定边缘。使

    2022年5月25日
    41
  • c# 调用Microsoft XPS Document Writer打印机,将Pdf文件转换成Xps文件「建议收藏」

    c# 调用Microsoft XPS Document Writer打印机,将Pdf文件转换成Xps文件「建议收藏」最近碰到个项目,其中有个需要将pdf文件转换成xps文件的功能,xps文件还算是新东西,所以基本没啥了解,通过一段时间的调查,本人算是找到了2个方法:  1)通过PDFNet第三发开发组件即可很容易的完成转换功能,并且还有其他针对pdf文件操作的功能,还是很强大的。当然啦,这个东     西是要买的,可以先下一个试用版先体验体验。    下载地址:http://w

    2022年5月4日
    310

发表回复

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

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