Java守護線程-沒什麼意義

來源:互聯網
上載者:User

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);

刪除,那麼就可以列印出數字了。

那他列印什麼呢?

結果是什麼也不列印。

這就是守護線程,守護著最後一個使用者線程,如果沒有使用者線程了,他也沒作用了。不退出等什嗎??

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.