Java高并发编程学习--3. 线程的守护线程

一、守护线程

  • 若JVM中没有一个非守护线程,则JVM的进程会退出
  • 2处加上注释,运行JVM不会退出;打开注释,运行则会退出
  • setDeamon方法将thread设为守护线程,main结束生命周期后,JVM
  • 也会随之退出,thread线程也会结束
  • 守护线程的作用:
    1. 守护线程具有自动结束生命周期的特性,非守护线程没有
    1. 如果JVM进程的垃圾回收线程是非守护线程,main结束垃圾回收线程不会结束,
  • JVM也不会结束。
    1. 当退出某些线程的时候,可以结束某些线程,或退出JVM进程的时候,一些线程
  • 自动关闭,可以考虑用守护线程

二、例子

package mian;

import java.util.concurrent.TimeUnit;

/**
 * @ClassName DaemonThread
 * 守护线程的例子
 * 若JVM中没有一个非守护线程,则JVM的进程会退出
 * 2处加上注释,运行JVM不会退出;打开注释,运行则会退出
 * setDeamon方法将thread设为守护线程,main结束生命周期后,JVM
 * 也会随之退出,thread线程也会结束
 * 守护线程的作用:
 * 1. 守护线程具有自动结束生命周期的特性,非守护线程没有
 * 2. 如果JVM进程的垃圾回收线程是非守护线程,main结束垃圾回收线程不会结束,
 * JVM也不会结束。
 * 3. 当退出某些线程的时候,可以结束某些线程,或退出JVM进程的时候,一些线程
 * 自动关闭,可以考虑用守护线程
 * @Description TODO
 * @Author Cays
 * @Date 2019/3/11 9:47
 * @Version 1.0
 **/
public class DaemonThread {
    //JVM启动的main线程
    public static void main(String []args) throws InterruptedException {
        // 我们自己创建的线程
        // 1. 线程开始
        Thread thread=new Thread(){
            @Override
            public void run() {
                while (true){
                    try{
                        TimeUnit.MINUTES.sleep(1);
                    }catch (InterruptedException e){
                        System.out.println("I am be interrupted ? "+isInterrupted());
                    }
                }
            }
        };
        // 2. 将thread设置为守护线程
        //thread.setDaemon(true);
        // 3. 启动thread线程
        thread.start();
        TimeUnit.MILLISECONDS.sleep(2);
        System.out.println("Thread is interrupted ? "+thread.isInterrupted());
        thread.interrupt();
        TimeUnit.MILLISECONDS.sleep(2);
        System.out.println("Thread is interrupted ? "+thread.isInterrupted());
        // 4. main线程结束
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39400984/article/details/89761434