JDK中线程组ThreadGroup

简介:

如果线程有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 }
复制代码

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/6181540.html,如需转载请自行联系原作者

相关文章
|
6月前
|
Java 调度 开发者
JDK 21中的虚拟线程:轻量级并发的新篇章
本文深入探讨了JDK 21中引入的虚拟线程(Virtual Threads)概念,分析了其背后的设计哲学,以及与传统线程模型的区别。文章还将讨论虚拟线程如何简化并发编程,提高资源利用率,并展示了一些使用虚拟线程进行开发的示例。
1064 4
|
6月前
|
缓存 安全 Java
JDK8线程池BUG引发的思考
JDK8线程池BUG引发的思考
149 0
|
6月前
|
存储 缓存 并行计算
【面试问题】JDK并发类库提供的线程池实现有哪些?
【1月更文挑战第27天】【面试问题】JDK并发类库提供的线程池实现有哪些?
|
12月前
|
算法 安全 Java
【Java】JDK 21中的虚拟线程以及其他新特性
【Java】JDK 21中的虚拟线程以及其他新特性
211 0
|
1月前
|
Dubbo Java 应用服务中间件
剖析Tomcat线程池与JDK线程池的区别和联系!
剖析Tomcat线程池与JDK线程池的区别和联系!
剖析Tomcat线程池与JDK线程池的区别和联系!
|
16天前
|
监控 数据可视化 Java
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
|
2月前
|
监控 数据可视化 Java
使用JDK自带的监控工具JConsole来监控线程池的内存使用情况
使用JDK自带的监控工具JConsole来监控线程池的内存使用情况
|
3月前
|
缓存 Java 调度
【Java 并发秘籍】线程池大作战:揭秘 JDK 中的线程池家族!
【8月更文挑战第24天】Java的并发库提供多种线程池以应对不同的多线程编程需求。本文通过实例介绍了四种主要线程池:固定大小线程池、可缓存线程池、单一线程线程池及定时任务线程池。固定大小线程池通过预设线程数管理任务队列;可缓存线程池能根据需要动态调整线程数量;单一线程线程池确保任务顺序执行;定时任务线程池支持周期性或延时任务调度。了解并正确选用这些线程池有助于提高程序效率和资源利用率。
51 2
|
3月前
|
算法 Java
JDK版本特性问题之想控制 G1 垃圾回收器的并行工作线程数量,如何解决
JDK版本特性问题之想控制 G1 垃圾回收器的并行工作线程数量,如何解决
|
4月前
|
监控 Java 开发者
Java面试题:解释Java内存模型中的内存顺序规则,Java中的线程组(ThreadGroup)的工作原理,Java中的FutureTask的工作原理
Java面试题:解释Java内存模型中的内存顺序规则,Java中的线程组(ThreadGroup)的工作原理,Java中的FutureTask的工作原理
27 0