java ThreadGroup 作用 方法解析(转)
ThreadGroup线程组,java对这个类的描述呢就是
“线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除了初始线程组之外的每个线程组都有一个父线程组。
允许线程访问关于其线程组的信息,但不允许访问关于其线程组的父线程组或任何其他线程组的信息。”
ThreadGroup并不是算是标注容器,因为,最后你会发现这个家伙是没有public的 add,remove方法的。那怎么把线程放到线程组里面呢?
答案是 在new Thread(参数),将ThreadGroup当做参数传进去。
Field
private final ThreadGroup parent;// 线程组的线程组,final 表名 线程组 不可以随便变更 String name; //名字 int maxPriority;//这个线程组 的元素 例如 线程 线程组的最大优先级,具体实现是 当线程或者线程组自身设定优先级的时候,总是取 自己父线程组的优先级和要设定的优先级的最小值 boolean destroyed;//判断是否销毁了 boolean daemon;//当守护进程线程组的最后一个线程停止或最后一个线程组被销毁时,将自动销毁该线程组。 int nUnstartedThreads = 0; int nthreads;//这个线程组 里面的线程数量
Thread threads[];//线程数组 ,持有 线程的引用 int ngroups;//这个线程组 里面的线程组数量
ThreadGroup groups[];//线程组数组 ,持有 线程组的引用
私有构造方法
//创建不在任何线程组中的空线程组。
//此方法用于创建系统线程组。
private ThreadGroup()
公共构造方法
//创建一个新线程组。这个新组的父线程组是指定的线程组parent。线程组的 名字 就是name
会对 parent 调用checkAccess() 确定当前运行的线程是否具有修改此线程组的权限(比如 设置setDaemon)。有可能会抛出SecurityException异常
public ThreadGroup(ThreadGroup parent, String name) //构造一个新线程组。这个新组的父线程组是当前运行线程的线程组。 就是调用上面的方法
public ThreadGroup(String name) {
this(Thread.currentThread().getThreadGroup(), name);
}
公共方法
public final String getName()//返回线程组名字
//返回父线程组 parent 调用checkAccess() 确定当前运行的线程是否具有修改此线程组的权限。
//有可能会抛出SecurityException异常
public final ThreadGroup getParent()
public final int getMaxPriority() //返回线程组优先级 //测试此线程组是否是守护进程线程组。当守护进程线程组的最后一个线程停止或最后一个线程组被销毁时,将自动销毁该线程组。
public final boolean isDaemon() public synchronized boolean isDestroyed()//测试该线程组是否已被销毁。 public final void setDaemon(boolean daemon)//将线程组设置成守护线程组 ,会检查 当前线程是否具有权限 修改线程组 //设定当前线程组以及子线程组的 优先级,取pri和当前线程组的父线程组的优先级的较小值为准。
//这个之所以会限制 Thread的最大优先级
//具体实现是 当线程或者线程组自身设定优先级的时候,总是取 自己父线程组的优先级和要设定的优先级的最小值
//会检查 当前线程是否具有权限 修改线程组
public final void setMaxPriority(int pri) //测试,当前这个线程组是否是 g线程组的父线程 或者参数
public final boolean parentOf(ThreadGroup g) //检查 当前线程是否具有权限 修改线程组 比如在当前线程中 用线程组自己本身调用它自己的一些方法 ,都会检查
public final void checkAccess() //返回此线程组及其子线程组中活动线程数量的估计值。递归地遍历此线程组中的所有子组。 如果当前线程组已经destroyed,返回0
public int activeCount() //将线程组的中线程 活动线程放入list[]里面 会自动扩大这个数组,如果{@code recurse}为{@code true},则此方法递归枚举此线程组的所有子组,并引用这些子组中的每个活动线程
//注意这个声明数组的方式
public int enumerate(Thread list[], boolean recurse)
//和上面方法类似 只不过 下面这个 ThreadGroup
public int enumerate(ThreadGroup list[])
public int enumerate(ThreadGroup list[], boolean recurse) //返回此线程组及其子组中活动组的数量的估计值。递归地遍历此线程组中的所有子组。
public int activeGroupCount() //interrupt此线程组中的所有线程。包括 子线程组中的线程
public final void interrupt()
特殊的一个方法
public void uncaughtException(Thread t, Throwable e)
这个方法呢,作用很简单 使 t 线程 抛出一个 Throwable e的异常。这个e 异常 也是你自己定义的。
如果前面设置了,
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
System.out.println("默认的 "+t.getName());
System.out.println("默认的 "+e);
});
那么,在上面自定义的Throwable 会被这个捕获,如果没有设置,就打印标注错误流。对这个方法,存在的意义 比较困惑,,,
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
System.out.println("默认的 "+t.getName());
System.out.println("默认的 "+e);
});
ThreadGroup threadGroup = new ThreadGroup("father");
Thread two = new Thread(threadGroup,"two");
threadGroup.uncaughtException(two,new IllegalAccessException("ssss"));
运行结果
转:https://blog.csdn.net/a1064072510/article/details/87455525
java ThreadGroup 作用 方法解析(转)的更多相关文章
- java.lang.Object 方法解析
1.clone() a.是一个native方法,效率比非native高 b.是protected 修饰的,要用他必须继承object,默认都是继承object的 c.返回是一个object 对象,需要 ...
- Java反射桥接方法解析
在阅读mybaits源码的反射模块时,看到了如下的一段代码: /** * 添加 Method 数组到 uniqueMethods * @param uniqueMethods * @param met ...
- java 8 Hashmap深入解析 —— put get 方法源码
每个java程序员都知道,HashMap是java中最重要的集合类之一,也是找工作面试中非常常见的考点,因为HashMap的实现本身确实蕴含了很多精妙的代码设计. 对于普通的程序员,可能仅仅能说出Ha ...
- JAVA中生成、解析二维码图片的方法
JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...
- 自己(转)JAVA中toString方法的作用
JAVA中toString方法的作用 因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.print ...
- 沉淀再出发:java中线程池解析
沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的 ...
- Java高级面试题解析(二):百度Java面试题前200页(精选)
基本概念 操作系统中 heap 和 stack 的区别 heap是堆,stack是栈,是两种不同的数据结构.堆是队列优先,先进先出:栈是先进后出. 在java多线程中,每个线程都有自己的栈:不同的线程 ...
- 【转】Java HashMap 源码解析(好文章)
.fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ...
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.* 点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...
随机推荐
- oracle汉字排序
oracle在9i之前是对汉字的排序是按照二进制编码进行排序的,很不适合我们的国情,在oracle9i之后,汉字的排序方式有了以下三种方式: 1.使用拼音排序 NLS_SORT=SC ...
- BZOJ 1257 [CQOI2007]余数之和 数学
都不知道说什么好...咕咕到现在.. 求:$\sum_{i=1}^n \space k\space mod \space i$ 即求:$n*k-\sum_{i=1}^n\space \lfloor \ ...
- HDU 3081 Marriage Match II 最大流OR二分匹配
Marriage Match IIHDU - 3081 题目大意:每个女孩子可以和没有与她或者是她的朋友有过争吵的男孩子交男朋友,现在玩一个游戏,每一轮每个女孩子都要交一个新的男朋友,问最多可以玩多少 ...
- Solr6.0环境搭建
感谢TTTTTTTTT丶的分享. 转载地址: 点击打开链接 准备工作: 目前最新版本6.0.下载solr 6.0:Solr6.0下载 JDK8 下载jdk1.8:jdk1.8[solr6.0是基于jd ...
- Django基础之命名空间模式(include)
即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 例如: project中的urls.py from django.conf.urls import url, ...
- 年视图,选择月份 ---bootstrap datepicker
$.fn.datepicker.dates['cn'] = { //切换为中文显示 days: ["周日", "周一", "周二", &qu ...
- 论一种基于JS技术的WEB前端动态生成框图的方法
前言 HTML是一种标记语言,由HTML的标签元素和文本编写的文档可被浏览器描述为一幅网页.通常情况下网页的实现是由HTML.CSS和Javascript三者结合完成的,HTML负责网页的结构,CSS ...
- SQL和HQL 区别浅析!!!
hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在hiber ...
- iOS (APP)进程间8中常用通信方式总结
1 URL Scheme 2 Keychain 3 UIPasteboard 4 UIDocumentInteractionController 5 local socket 6 AirDrop 7 ...
- mysql连表操作是先连表还是先查询条件
mysql连表操作是先连表还是先查询条件 一.总结 一句话总结: 连表操作时:先根据查询条件和查询字段确定驱动表,确定驱动表之后就可以开始连表操作了,然后再在缓存结果中根据查询条件找符合条件的数据 1 ...