Java主線程與子線程


Java 實例 - 獲取所有線程

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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM