java ThreadGroup 作用 方法解析(转)

ThreadGroup线程组,java对这个类的描述呢就是
“线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除了初始线程组之外的每个线程组都有一个父线程组。
允许线程访问关于其线程组的信息,但不允许访问关于其线程组的父线程组或任何其他线程组的信息。”

ThreadGroup并不是算是标注容器,因为,最后你会发现这个家伙是没有public的 add,remove方法的。那怎么把线程放到线程组里面呢?
答案是 在new Thread(参数),将ThreadGroup当做参数传进去。

Field

1private final ThreadGroup parent;// 线程组的线程组,final 表名 线程组 不可以随便变更 2 3String name; //名字 4 5int maxPriority;//这个线程组 的元素 例如 线程 线程组的最大优先级,具体实现是 当线程或者线程组自身设定优先级的时候,总是取 自己父线程组的优先级和要设定的优先级的最小值 6 7boolean destroyed;//判断是否销毁了 8 9boolean daemon;//当守护进程线程组的最后一个线程停止或最后一个线程组被销毁时,将自动销毁该线程组。 10 11int nUnstartedThreads = 0; 12 13int nthreads;//这个线程组 里面的线程数量 14Thread threads[];//线程数组 ,持有 线程的引用 15 16int ngroups;//这个线程组 里面的线程组数量 17ThreadGroup groups[];//线程组数组 ,持有 线程组的引用

私有构造方法

1//创建不在任何线程组中的空线程组。 2//此方法用于创建系统线程组。 3private ThreadGroup()

公共构造方法

1//创建一个新线程组。这个新组的父线程组是指定的线程组parent。线程组的 名字 就是name 2会对 parent 调用checkAccess() 确定当前运行的线程是否具有修改此线程组的权限(比如 设置setDaemon)。有可能会抛出SecurityException异常 3public ThreadGroup(ThreadGroup parent, String name) 4 5//构造一个新线程组。这个新组的父线程组是当前运行线程的线程组。 就是调用上面的方法 6public ThreadGroup(String name) { 7 this(Thread.currentThread().getThreadGroup(), name); 8}

公共方法

1public final String getName()//返回线程组名字 2//返回父线程组 parent 调用checkAccess() 确定当前运行的线程是否具有修改此线程组的权限。 3//有可能会抛出SecurityException异常 4public final ThreadGroup getParent() 5public final int getMaxPriority() //返回线程组优先级 6 7//测试此线程组是否是守护进程线程组。当守护进程线程组的最后一个线程停止或最后一个线程组被销毁时,将自动销毁该线程组。 8public final boolean isDaemon() 9 10public synchronized boolean isDestroyed()//测试该线程组是否已被销毁。 11 12public final void setDaemon(boolean daemon)//将线程组设置成守护线程组 ,会检查 当前线程是否具有权限 修改线程组 13 14 //设定当前线程组以及子线程组的 优先级,取pri和当前线程组的父线程组的优先级的较小值为准。 15 //这个之所以会限制 Thread的最大优先级 16 //具体实现是 当线程或者线程组自身设定优先级的时候,总是取 自己父线程组的优先级和要设定的优先级的最小值 17 //会检查 当前线程是否具有权限 修改线程组 18public final void setMaxPriority(int pri) 19 20 //测试,当前这个线程组是否是 g线程组的父线程 或者参数 21public final boolean parentOf(ThreadGroup g) 22 23 //检查 当前线程是否具有权限 修改线程组 比如在当前线程中 用线程组自己本身调用它自己的一些方法 ,都会检查 24public final void checkAccess() 25 26//返回此线程组及其子线程组中活动线程数量的估计值。递归地遍历此线程组中的所有子组。 如果当前线程组已经destroyed,返回0 27public int activeCount() 28 29//将线程组的中线程 活动线程放入list[]里面 会自动扩大这个数组,如果{@code recurse}为{@code true},则此方法递归枚举此线程组的所有子组,并引用这些子组中的每个活动线程 30 //注意这个声明数组的方式 31public int enumerate(Thread list[], boolean recurse) 32//和上面方法类似 只不过 下面这个 ThreadGroup 33public int enumerate(ThreadGroup list[]) 34public int enumerate(ThreadGroup list[], boolean recurse) 35 36 //返回此线程组及其子组中活动组的数量的估计值。递归地遍历此线程组中的所有子组。 37public int activeGroupCount() 38 39//interrupt此线程组中的所有线程。包括 子线程组中的线程 40public final void interrupt()

特殊的一个方法

public void uncaughtException(Thread t, Throwable e)

这个方法呢,作用很简单 使 t 线程 抛出一个 Throwable e的异常。这个e 异常 也是你自己定义的。
如果前面设置了,

1Thread.setDefaultUncaughtExceptionHandler((t, e) -> { 2 System.out.println("默认的 "+t.getName()); 3 System.out.println("默认的 "+e); 4 5});

那么,在上面自定义的Throwable 会被这个捕获,如果没有设置,就打印标注错误流。对这个方法,存在的意义 比较困惑,,,

1Thread.setDefaultUncaughtExceptionHandler((t, e) -> { 2 System.out.println("默认的 "+t.getName()); 3 System.out.println("默认的 "+e); 4 5 }); 6 7 ThreadGroup threadGroup = new ThreadGroup("father"); 8 Thread two = new Thread(threadGroup,"two"); 9 threadGroup.uncaughtException(two,new IllegalAccessException("ssss"));

运行结果
在这里插入图片描述

转:https://blog.csdn.net/a1064072510/article/details/87455525

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java并发之Semaphore源码解析

Semaphore前情提要在学习本章前,需要先了解ReentrantLock源码解析,ReentrantLock源码解析里介绍的方法有很多是本章的铺垫。下面,我们进入本章正题Semaphore。从概念上来讲,信号量(Semaphore)会维护一组许可证用于限制线程对资源的访问,当我们有一资源允许线程并发访问,但我们希望能限制访问量,就可以用信号量对访问线程

java并发编程之二

CountDownLatch类  允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。  CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在

Executor框架

任务是一组逻辑工作单元,而线程则是使任务异步执行的机制。线程池简化了线程的管理工作,并且java.util.concurrent提供了一种灵活的线程池实现作为Executor框架的一部分。在Java类库中,任务执行的主要抽象不是Thread,而是Executor,如下所示:publicinterfaceExecutor{void

Java CyclicBarrier介绍

CyclicBarrier(周期障碍)类可以帮助同步,它允许一组线程等待整个线程组到达公共屏障点。CyclicBarrier是使用整型变量构造的,其确定组中的线程数。当一个线程到达屏障时(通过调用CyclicBarrier.await()),它会被阻塞,直到所有线程都到达屏障,然后在该点允许所有线程继续执行。与CountDownLatch不同的

Python进程、线程、协程的对比

1\.执行过程每个线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在进程中,由进程提供多个线程执行控制。每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。协程,又称微线程,Coroutine。执行过程中,在子程序内部可中断,然后转而

java ThreadGroup 作用 方法解析(转) - HelloWorld