Java中的守護線程學習筆記

1. 概念

守護線程其實也是一個線程,它與用戶線程的不同之處就在於它的生命週期,當程序中其他線程都結束時,守護線程就會結束自己的生命週期。只要程序中還有一個線程還沒有結束,守護線程就會一直工作。

守護線程中產生的新線程也是守護線程

2. 守護線程的設置

t.setDaemon(true);

默認守護線程是false,需要程序員手動設置。值得注意的一點是,線程需要在start之前設置爲守護線程,否則會拋出一個IllegalThreadStateException異常

3. 守護線程的應用

  • GC就是一個守護線程
  • 分佈式系統中的心跳線程也是一個守護線程

4. 實例

package com.ywq.concurrency.MyTest;

public class TestDaemon {
    public static void main(String[] args) {
        Thread t1=new Thread(()->{
            Thread t2=new Thread(()->{
                while(true){
                    System.out.println("t2");
                }
            });
            t2.setDaemon(true);
            t2.start();
        });

        t1.start();

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

在主線程中創建一個子線程,子線程中創建一個守護線程後就停止了,讓主線程休眠5秒鐘,這時主線程還在運行中,所以守護線程會一直打印,5秒後,主線程也掛掉了,處了守護線程外,沒有其他線程了,所以守護線程也結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章