對(duì)Java程序來(lái)說(shuō),只要還有一個(gè)前臺(tái)線程在運(yùn)行,這個(gè)進(jìn)程就不會(huì)結(jié)束,如果一個(gè)進(jìn)程中只有后臺(tái)線程在運(yùn)行,這個(gè)進(jìn)程就會(huì)結(jié)束。前臺(tái)線程是相對(duì)后臺(tái)線程而言的,前面所介紹的線程都是前臺(tái)線程。那么什么樣的線程是后臺(tái)線程呢?如果某個(gè)線程對(duì)象在啟動(dòng)(調(diào)用start()方法)之前調(diào)用了setDaemon(true)方法,這個(gè)線程就變成了后臺(tái)線程。下面來(lái)看一下進(jìn)程中只有后臺(tái)線程在運(yùn)行的情況,如下所示:
范例:ThreadDaemon.java
01 public class ThreadDaemon
02 {
03 public static void main(String args[])
04 {
05 ThreadTest t = new ThreadTest() ;
06 Thread tt = new Thread(t) ;
07 tt.setDaemon(true) ; // 設(shè)置后臺(tái)運(yùn)行
08 tt.start();
09 }
10 }
11
12 class ThreadTest implements Runnable
13 {
14 public void run()
15 {
16 while(true)
17 {
18 System.out.println(Thread.currentThread().getName()+"is running.");
19 }
20 }
21 }
從上面的程序和運(yùn)行結(jié)果(圖9-4)上,可以看到:雖然創(chuàng)建了一個(gè)無(wú)限循環(huán)的線程,但因?yàn)樗呛笈_(tái)線程,整個(gè)進(jìn)程在主線程結(jié)束時(shí)就隨之終止運(yùn)行了。這驗(yàn)證了
進(jìn)程中只有后臺(tái)線程運(yùn)行時(shí),進(jìn)程就會(huì)結(jié)束的說(shuō)法。