如果線程有100條...分散的不好管理...
線程同樣可以分組ThreadGroup類.
線程組表示一個線程的集合。此外,線程組也可以包含其他線程組。線程組構成一棵樹,在樹中,除了初始線程組外,每個線程組都有一個父線程組。
允許線程訪問有關自己的線程組的信息,但是不允許它訪問有關其線程組的父線程組或其他任何線程組的信息。
如果t1線程不調用start方法的話並不會添加到mainGroup中,只有線程調用start()方法,線程運行起來才可以. 只能添加當前線程組活動的線程.
線程組有什么用呢?
線程組中有一個非常好的方法,
獲得線程組之后可以知道這個線程組中的哪些線程是運行着的.每條線程是什么,都可以獲得到.
enumerate
(Thread[] list)
把此線程組及其子組中的所有活動線程復制到指定數組中。
這個方法非常有意思....
可以知道線程組哪些線程還活着,哪些線程已經死了.然后根據這個做相應的處理.
再介紹一個parentGroup方法. 獲得它的父線程組.
主線程組的父線程是system類的線程組.包含很多的線程,垃圾回收等....
2 3 public class ThreadGroupDemo { 4 5 public static void main(String[] args) { 6 Thread main = Thread.currentThread(); 7 ThreadGroup mainGroup = main.getThreadGroup(); 8 System.out.println(mainGroup);//輸出:java.lang.ThreadGroup[name=main,maxpri=10] 主線程在一個叫做main的線程組中,最大優先級是10 9 10 mainGroup.list();//打印線程組的所有信息 11 /* 12 java.lang.ThreadGroup[name=main,maxpri=10] 13 Thread[main,5,main] 14 */ 15 16 17 //指定線程組是"myThread" 18 Thread t1 = new Thread(mainGroup,"myThread"); 19 t1.start();//必須要調用start方法運行之后(活動的線程)才能添加到線程組中. 20 mainGroup.list(); 21 /* 22 java.lang.ThreadGroup[name=main,maxpri=10] 23 Thread[main,5,main] 24 Thread[myThread,5,main] 25 */ 26 27 28 //通過線程組可以知道,這個線程組中有多少條線程是運行着的,有多少條線程,每條線程是什么都可以獲取到. 29 Thread[] arr = new Thread[mainGroup.activeCount()]; 30 main.enumerate(arr);//將線程組中活動的線程復制到指定數組中。 31 for (Thread thread : arr) { 32 System.out.println(thread.getName());//輸出:main 和 myThread 33 } 34 35 36 ThreadGroup parent = mainGroup.getParent();//獲得父線程組. 37 parent.list(); 38 /* main線程的父線程組中有system和垃圾回收相關的線程.. 39 java.lang.ThreadGroup[name=system,maxpri=10] 40 Thread[Reference Handler,10,system] 41 Thread[Finalizer,8,system] 42 Thread[Signal Dispatcher,9,system] 43 Thread[Attach Listener,5,system] 44 java.lang.ThreadGroup[name=main,maxpri=10] 45 Thread[main,5,main] 46 */ 47 48 } 49 }