Java中User Thread和Daemon Thread的區別

來源:互聯網
上載者:User

Java將線程分為User線程和Daemon線程兩種。通常Daemon線程用來為User線程提供某些服務。程式的main()方法線程是一個User進程。User進程建立的進程為User進程。當所有的User線程結束後,JVM才會結束。


通過在一個線程對象上調用setDaemon(true),可以將user線程建立的線程明確地設定成Daemon線程。例如,時鐘處理線程、idle線程、記憶體回收線程、螢幕更新線程等,都是Daemon線程。通常新建立的線程會從建立它的進程哪裡繼承daemon狀態,除非明確地線上程對象上調用setDaemon方法來改變daemon狀態。

需要注意的是,setDaemon()方法必須在調用線程的start()方法之前調用。一旦一個線程開始執行(如,調用了start()方法),它的daemon狀態不能再修改。通過方法isDaemon()可以知道一個線程是否Daemon線程。

通過執行下面的代碼,可以很清楚地說明daemon的作用。當設定線程t為Daemon線程時,只要User線程(main線程)一結束,程式立即退出,也就是說Daemon線程沒有時間從10數到1。但是,如果將線程t設成非daemon,即User線程,則該線程可以完成自己的工作(從10數到1)。

import static java.util.concurrent.TimeUnit.*;<br />public class DaemonTest {<br /> public static void main(String[] args) throws InterruptedException {<br /> Runnable r = new Runnable() {<br /> public void run() {<br /> for (int time = 10; time > 0; --time) {<br /> System.out.println("Time #" + time);<br /> try {<br /> SECONDS.sleep(2);<br /> } catch (InterruptedException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> }<br /> };</p><p> Thread t = new Thread(r);<br /> t.setDaemon(true); // try to set this to "false" and see what happens<br /> t.start();</p><p> System.out.println("Main thread waiting...");<br /> SECONDS.sleep(6);<br /> System.out.println("Main thread exited.");<br /> }<br />} 

  • t為Daemon線程的輸出:

Time #10

Time #9

Time #8

Main thread exited.

Time #7

  • t為User線程的輸出:

Main thread waiting...

Time #10

Time #9

Time #8

Main thread exited.

Time #7

Time #6

Time #5

Time #4

Time #3

Time #2

Time #1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.