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】
警告:主线程宣告退出!

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java学习之Spring MVC路由映射

    Java学习之SpringMVC路由映射0x00前言补充缺失的Javaweb部分内容。0x01SpringMVC路由映射web.xml中配置解析路径<display-name&

    2021年12月13日
  • WinRAR 去除广告弹窗,简单4步亲测有效!

    WinRAR 去除广告弹窗,简单4步亲测有效!非常实用,亲测有效!下载这款破解小可爱软件:ResourceHacker软件很小,不要闲麻烦下载后打开WinRAR.exe,点击字符串表:修改第80:2052删除1272,然后保存。再次使用就没弹窗了,舒服了!参考:https://www.hack520.com/173.html…

  • qq客服代码实现过程

    qq客服代码实现过程

  • Kubernetes 针对资源紧缺处理方式的配置

    Kubernetes 针对资源紧缺处理方式的配置

  • 抖音粉丝快速增长的有效方法 抖音怎么增加1000粉丝

    抖音粉丝快速增长的有效方法 抖音怎么增加1000粉丝同比淘宝、京东、拼多多等成熟的电商平台,抖音视频在短短几年内以“病毒式”的增长速度发展。很多人也想趁着这个风口,抢夺这块蛋糕。但对于,没有运营经验的人来说,账号要做起来并非是这么简单。那么想要做好抖音号,内容策划、账号定位、人群画像、发布时间该注意什么呢?抖音用户画像和人群分析人群性别:抖音的用户中,52%的用户为男性,48%的用户为女性,男女比例基本属于持平。另一方面,抖音的男性大多是理性消费者,女性大多是感性消费者。如果你的产品的针对人群是男性,内容应该偏向性价比、功能、

  • ipad越狱有什么坏处吗?_平板越狱有什么好处

    ipad越狱有什么坏处吗?_平板越狱有什么好处1. iPad越狱是什么?iPad越狱有什么好处和坏处?不越狱又有啥缺点?越狱就是解除一些原版固件的限制。最大的好处是可以安装激活成功教程的软件和游戏,这些软件和游戏本来都是收费的。而且,有些功能很强大的软件,并不是花钱能在官方的App Store里能买到的(某些有米之人或许会说“我就不越狱,我都花钱买正版”,我只能客气地说他只知其一不知其二),比如SBSettings, OpenSSH, Lockd

发表回复

您的电子邮箱地址不会被公开。

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