Java 守护线程

161 阅读1分钟

内容

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

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

  • 守护线程并非只有虚拟机内部可以提供,用户也可以手动将一个用户线程设定/转换为守护线程。

  • 在Thread类中提供了一个setDaemon(true)方法来将一个普通的线程(用户线程)设置为守护线程。

用例

public class DaemonThread {
    public static void main(String[] args) {
        DaemonT daemonT = new DaemonT();
        UserT userT = new UserT();
        Thread dT = new Thread(daemonT);
        dT.setDaemon(true);//默认是false即用户线程,true设为守护线程
        dT.start();
        new Thread(userT).start();

    }
}
class DaemonT implements Runnable{
    @Override
    public void run() {
        while(true){
            System.out.println("still here");
        }
    }
}
class UserT implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("I am little user");
        }
    }
}