java ThreadGroup源码分析

Posted 那天ws

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ThreadGroup源码分析相关的知识,希望对你有一定的参考价值。

使用:

技术分享图片
 1 import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         
 7         ThreadGroup tg = new ThreadGroup("threadGroup-001"); 
 8         
 9         Thread t1 = new Thread(tg, new MyThread());
10         t1.start();
11         
12         Thread t2 = new Thread(tg, new MyThread());
13         t2.start();
14         
15         // 返回线程组中活动线程的估计数
16         System.out.println("active thread group: " + tg.activeCount());
17         // 返回此线程组中活动线程组的估计数
18         System.out.println("activeGroupCount: " + tg.activeGroupCount());
19         // 检查当前运行的线程是否有权修改此线程组
20         tg.checkAccess();
21         // 设置线程组的最高优先级
22         tg.setMaxPriority(6);
23         // 返回此线程组的最高优先级
24         System.out.println("maxPriority: " + tg.getMaxPriority());
25         // 返回此线程组的名称
26         System.out.println("thread group name: " + tg.getName());
27         // 返回此线程组的父线程组
28         System.out.println(tg.getParent());
29         // 中断此线程组中的所有线程
30         tg.interrupt();
31         // 更改此线程组的后台程序状态
32         tg.setDaemon(true);
33         // 测试此线程组是否为一个后台程序线程组
34         System.out.println("is daemon: " + tg.isDaemon());
35         // 测试此线程组是否为线程组参数或其祖先线程组之一
36         System.out.println("is parent: "+ tg.getParent().parentOf(tg));
37         // 打印线程组信息
38         tg.list();
39         // 返回线程组的字符串表示形式
40         System.out.println(tg.toString());
41         // 销毁此线程组及其所有子组
42         tg.destroy();
43         // 测试此线程组是否已经销毁
44         System.out.println(tg.isDestroyed());
45 //        System.out.println(tg.);
46     }
47     
48     private static class MyThread extends Thread {
49         @Override
50         public void run() {
51             System.out.println("thread name: " + Thread.currentThread().getName());
52         }
53     }
54 
55 }
View Code

一、构造函数

  两种构造函数:

ThreadGroup(String name) 
         
ThreadGroup(ThreadGroup parent, String name) 

  

// 创建一个线程组必须关联到一个父线程组,默认父线程组是当前线程的线程组Thread.currentThread().getThreadGroup()。
// 并检查父线程组的权限。
技术分享图片
public ThreadGroup(String name) {
    this(Thread.currentThread().getThreadGroup(), name);
}
View Code
技术分享图片
1 public ThreadGroup(ThreadGroup parent, String name) {
2     this(checkParentAccess(parent), parent, name);
3 }
View Code
// 初始化此线程组的名称(name)、最高优先级(maxPriority)、daemon、父线程组(parent)
// 并将此线程组添加到父线程组中(parent.add(this))
技术分享图片
1 private ThreadGroup(Void unused, ThreadGroup parent, String name) {
2     this.name = name;
3     this.maxPriority = parent.maxPriority;
4     this.daemon = parent.daemon;
5     this.parent = parent;
6     parent.add(this);
7 }
View Code
// 添加一个线程组到此线程组
技术分享图片
 1 private final void add(ThreadGroup g){
 2     synchronized (this) {
 3         if (destroyed) {
 4             throw new IllegalThreadStateException();
 5         }
 6         // 添加一个线程组到此线程组的groups数组中,groups初始容量为4,每次容量耗尽之后按2倍扩增。
 7         if (groups == null) {
 8             groups = new ThreadGroup[4];
 9         } else if (ngroups == groups.length) {
10             groups = Arrays.copyOf(groups, ngroups * 2);
11         }
12         groups[ngroups] = g;
13 
14         // This is done last so it doesn‘t matter in case the
15         // thread is killed
16         ngroups++;
17     }
18 }
View Code

 

以上是关于java ThreadGroup源码分析的主要内容,如果未能解决你的问题,请参考以下文章

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段

java.lang.Void类源码解析_java - JAVA

Jmeter入门笔谈

ThreadGroup