菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
203
0

守护线程

原创
05/13 14:22
阅读数 14528

main线程是用户线程;只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。

守护线程是在用户线程都退出时,突然退出的,此时守护线程的任务不一定完成了。

 

public class rrr {
    public static void main(String[] ddd){
        FutureTimeOutThread timeOutThread = new FutureTimeOutThread();
        timeOutThread.setDaemon(true);//守护线程, 
        timeOutThread.start();
        
        FutureTimeOutThread2 timeOutThread1 = new FutureTimeOutThread2();
        timeOutThread1.setDaemon(false);// 不是守护
        timeOutThread1.start();
        
        System.out.println("2222");
    }
    static class FutureTimeOutThread extends Thread{//守护
        @Override
        public void run() {
            FutureTimeOutThread1 timeOutThread = new FutureTimeOutThread1();
            timeOutThread.start();
            for(int i =0;i<3;i++) {//外层线程退出,里面开的线程不会退出,只有非守护都退出才退出
                System.out.println("1111");
            }
        }
    }
    static  class FutureTimeOutThread1 extends Thread{//默认也是守护
            @Override
            public void run() {
                for(int i =0;i<3;i++) {
                    System.out.println("222");
                }
            }
        }
    static  class FutureTimeOutThread2 extends Thread{//不是守护
            @Override
            public void run() {//main线程执行完,只要这个非守护线程还在,守护就还在。
                //main执行完,这个非守护可以一直执行。
                //main和这个非守护都执行完,守护立马退出。
                //守护都执行完,这个非守护不会退出
                for(int i =0;i<3;i++) {
                    System.out.println("333");
                }
            }
        }
}

 

发表评论

0/200
203 点赞
0 评论
收藏
为你推荐 换一批