zoukankan      html  css  js  c++  java
  • JAVA多线程学习六-守护线程

    java中的守护程序线程是一个服务提供程序线程,它为用户线程提供服务。 它的生命依赖于用户线程,即当所有用户线程都死掉时,JVM会自动终止该线程。

    有许多java守护程序线程自动运行,例如 gcfinalizer

    通过在命令提示符下键入jconsole来查看所有详细信息。 jconsole工具提供有关已加载类,内存使用情况,运行线程等的信息。

    Java中的守护程序线程的要点

    • 它为用户线程提供后台支持任务的服务。它在生命中没有为服务用户线程而发挥作用。
    • 它的生命取决于用户线程。
    • 它是一个低优先级的线程。

    如果没有用户线程,为什么JVM会终止守护程序线程?

    守护程序线程的唯一目的是它为用户线程提供后台支持任务的服务。 如果没有用户线程,为什么JVM要继续运行这个线程?这就是为什么JVM在没有用户线程的情况下终止守护进程线程的原因。

    Thread类的Java守护程序线程的方法

    java.lang.Thread类为java守护程序线程提供了两种方法。

    编号 方法 描述
    1 public void setDaemon(boolean status) 用于将当前线程标记为守护程序线程或用户线程。   
    2 public boolean isDaemon() 用于检查当前是守护进程。

    Java中守护程序线程的简单示例

    文件:TestDaemonThread1.java

    package com.example.thread;
    
    public class TestDaemonThread1 extends Thread {
        public void run() {
            if (Thread.currentThread().isDaemon()) {// checking for daemon thread
                System.out.println("daemon thread work");
            } else {
                System.out.println("user thread work");
            }
        }
    
        public static void main(String[] args) {
            TestDaemonThread1 t1 = new TestDaemonThread1();// creating thread
            TestDaemonThread1 t2 = new TestDaemonThread1();
            TestDaemonThread1 t3 = new TestDaemonThread1();
    
            t1.setDaemon(true);// now t1 is daemon thread
    
            t1.start();// starting threads
            t2.start();
            t3.start();
        }
    
    }

    输出

    daemon thread work
    user thread work
    user thread work
    注意: 如果要将用户线程设置为守护进程,则不能启动它,否则将抛出IllegalThreadStateException
    package com.example.thread;
    
    class TestDaemonThread2 extends Thread {
        public void run() {
            System.out.println("Name: " + Thread.currentThread().getName());
            System.out.println("Daemon: " + Thread.currentThread().isDaemon());
        }
    
        public static void main(String[] args) {
            TestDaemonThread2 t1 = new TestDaemonThread2();
            TestDaemonThread2 t2 = new TestDaemonThread2();
            t1.start();
            t1.setDaemon(true);// will throw exception here
            t2.start();
        }
    }
     执行出现异常
    Exception in thread "main" Name: Thread-0
    Daemon: false
    java.lang.IllegalThreadStateException
        at java.lang.Thread.setDaemon(Unknown Source)
        at com.yiibai.TestDaemonThread2.main(TestDaemonThread2.java:13)

    https://www.yiibai.com/java_multithreading/daemon-thread.html



  • 相关阅读:
    DM7 安装
    LeetCode 第 183 场周赛
    MySQL 源码中的 ut_a 、 ut_ad
    存储领域的会议和研究机构
    LeetCode 第 15 场双周赛
    LeetCode 第 167 场周赛
    值得推荐的C/C++框架和库
    InnoDB 中的锁实现
    LeetCode-第 166 场周赛
    LeetCode 第 165 场周赛
  • 原文地址:https://www.cnblogs.com/guanbin-529/p/13341910.html
Copyright © 2011-2022 走看看