Java的守護線程是什嗎?
不就是一個線程setDaemon(true);嗎?
一般開發的都知道這個,但是知道他是如何工作的麼,和使用者線程的區別是什麼呢???
這個可能就不清楚了,一直覺得自己好像挺清楚,最近才發現好像不清楚。
哈哈
接下來我們來總結一下,這個守護線程到底是幹嘛呢。
首先我們先看看守護線程是幹嘛的,然後再說Java守護線程是幹嘛的。
我們以Linux守護進程為例,看看守護進程是如何工作的。
看看定義:守護進程(Daemon)是運行在背景一種特殊進程。它獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。
也就是說守護線程不依賴於終端,但是依賴於系統,與系統“同生共死”。
那Java的守護線程是什麼樣子的呢。
當JVM中所有的線程都是守護線程的時候,JVM就可以退出了;
如果還有一個或以上的非守護線程則不會退出。
所以setDeamon(true)的唯一意義就是告訴JVM不需要等待這個線程運行結束(退出),當JVM想退出的時候就可以退出吧,不用管它。
多說無益:
看看例子吧
public class DeamonThread extends Thread {
public void run(){
try{
for(int i=0;i<10;i++){
Thread.sleep(1000);
System.out.println(i);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread thread=new DeamonThread();
thread.setDaemon(true);
thread.start();
}
}
你說這個程式會列印出什麼資訊呢??
數字吧???
如果我們把
thread.setDaemon(true);
刪除,那麼就可以列印出數字了。
那他列印什麼呢?
結果是什麼也不列印。
這就是守護線程,守護著最後一個使用者線程,如果沒有使用者線程了,他也沒作用了。不退出等什嗎??