Java多線程基礎總結二: Thread

來源:互聯網
上載者:User

對於Thread來說只想說兩個方法,一個是setDaemon(false|true),另一個是join()。首先說說守護線程,這麼東西是幹什麼用的?對於 Java應用我們都知道main方法是入口,它的運行代表著主線程開始工作了,我們也知道JVM裡面有記憶體回收行程的存在使得我們放心讓main飛 奔,然而這背後的故事是記憶體回收線程作為守護著主線程的守護線程默默的付出著。很像那個啥啊,呵呵。令人髮指的是main這個畜生背後 其實有好幾個守護線程默默的付出!當然如果硬是要把守護線程比做女人,非守護線程比做男人的話,那麼一個男人背後可以有多個默默付 出的女人。Java在設計時就預設了這個現實社會不太能實現的現實,並且強制規定如果男人不在了,這個虛擬世界就over了,看來資本主義 社會下長大的孩子創造的東西骨子裡是封建社會的血脈啊!扯遠了,對的,JVM內部的實現是如果啟動並執行程式只剩下守護線程的話,程式將 終止運行,直接結束。所以守護線程是作為輔助線程存在的,主要的作用是提供計數等等輔助的功能。下面寫個小例子說明一下:

Java代碼

/**
  * User: yanxuxin
  * Date: Dec 10, 2009
  * Time: 7:16:55 PM
  */
public class DaemonSample {
   public static void main(String[] args) throws Exception{
     DaemonThread t = new DaemonThread();
     t.setDaemon(true);//this is set t thread as a daemon thread.
     t.start();
     Thread.sleep(2000);
     System.out.println("main thread exit.");
   }
}

class DaemonThread extends Thread {
   @Override 
   public void run() {
     for(int i = 0; i < 10; i++) {
       try {
         Thread.sleep(1000);
       } catch (InterruptedException e) {
         e.printStackTrace();
       }
       System.out.println("i=" + i);
     }
   }
}

這個例子的結果是main主線程睡兩秒之後說再見,而子線程則是在這兩秒內計計數然後跟著一起說再見。當然它很不情願,因為它想計 10秒,但是沒機會。把t.setDaemonThread(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.