Daemon線程——在所有的非Daemon線程結束后JVM會停止。利用Daemon線程的特性,不停輸出目前運行的線程,然后判斷主線程與子線程的關系。
似乎主線程結束后,子線程還在繼續的樣子,但我並不能確定。
附上代碼
1 public class ThreadDemo { 2 public static void main(String[] args) { 3 System.out.println("start-當前活動的線程數" + Thread.activeCount()); 4 { 5 ThreadGroup currentGroup = Thread.currentThread().getThreadGroup(); 6 int noThreads = currentGroup.activeCount(); 7 Thread[] lstThreads = new Thread[noThreads]; 8 currentGroup.enumerate(lstThreads); 9 for (int i = 0; i < noThreads; i++) 10 System.out.println("線程號:" + i + " = " + lstThreads[i].getName()); 11 System.out.println(); 12 } 13 14 Thread thread = new Thread("thread") { 15 @Override 16 public void run() { 17 System.out.println("thread over"); 18 } 19 }; 20 21 Thread daemon = new Thread("daemon") { 22 @Override 23 public synchronized void run() { 24 while (true) { 25 // thread.isAlive(); 26 // System.out.println("當前活動的線程數"+Thread.activeCount()); 27 { 28 ThreadGroup currentGroup = Thread.currentThread().getThreadGroup(); 29 int noThreads = currentGroup.activeCount(); 30 Thread[] lstThreads = new Thread[noThreads]; 31 currentGroup.enumerate(lstThreads); 32 for (int i = 0; i < noThreads; i++) 33 System.out.println("線程號:" + i + " = " + lstThreads[i].getName()); 34 System.out.println(); 35 } 36 } 37 } 38 }; 39 daemon.setDaemon(true); 40 41 daemon.start(); 42 thread.start(); 43 44 System.out.println("end-當前活動的線程數" + Thread.activeCount()); 45 { 46 ThreadGroup currentGroup = Thread.currentThread().getThreadGroup(); 47 int noThreads = currentGroup.activeCount(); 48 Thread[] lstThreads = new Thread[noThreads]; 49 currentGroup.enumerate(lstThreads); 50 for (int i = 0; i < noThreads; i++) 51 System.out.println("線程號:" + i + " = " + lstThreads[i].getName()); 52 System.out.println(); 53 } 54 } 55 }