ThreadGroup

xiaoxiao2025-04-25  57

许多线程聚集成组即线程组,

线程组可以包括其他线程组,线程组随着层级的增加可形成树,其中的每个线程组除了初始化线程组外都存在着父线程组。

线程允许访问关于它自己的线程组的信息,但不允许访问其线程组的父线程组或任何其他线程组的信息。

当需要锁定策略的时候,线程组成子线程组到父线程组是尽可能地锁定一个级别的树,但是不锁住树的底部。这样可以限制需要持有的锁的数量,特别是避免为根线程组(或全局锁)获取锁,这锁将是多处理器系统中许多线程组争用的资源。这样的锁定策略通常会导致获取一个线程组状态的快照,并在该快照中工作,而不是在执行的时候将线程组锁住。

  1.ThreadGroup初始化

  ThreadGroup有提供构造方法,可以自行进行初始化设置或者自行交给Thread处理,因为在new Thread()时会默认初始化线程组ThreadGroup。关于ThreadGroup的初始化可以参考Thread的源码解析:http://ericchunli.iteye.com/blog/2394118。

  2.ThreadGroup源码解析

  public class ThreadGroup implements Thread.UncaughtExceptionHandler {

  private final ThreadGroup parent; // 父线程组

  String name; // 线程组名称

  int maxPriority; // 线程组优先级

  boolean destroyed; // 是否已经被销毁

  boolean daemon; // 守护线程

  boolean vmAllowSuspension; // 供VM使用

  int nUnstartedThreads = 0; // 线程组中未启动的线程

  int nthreads; // 线程数量

  Thread threads[]; // 线程

  int ngroups; // 线程组数量

  ThreadGroup groups[]; // 线程组

转载请注明原文地址: https://www.6miu.com/read-5029092.html

最新回复(0)