只是从英文名字上,也能看到这个概念的简单粗暴, ThreadGroup 就是线程组.
也就是说,每个 Thread 都能在一个 ThreadGroup 中找到.那么你可能会问了,我不存在于一个 ThreadGroup 不行?自己在程序里面一个人潇洒走天下,岂不是超级爽?
抱歉,此路不通.为啥呢?咱们来看源码:
private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inheritThreadLocals) { Thread parent = currentThread(); SecurityManager security = System.getSecurityManager(); if (g == null) { /* Determine if it's an applet or not */ /* If there is a security manager, ask the security manager what to do. */ if (security != null) { g = security.getThreadGroup(); } /* If the security doesn't have a strong opinion of the matter use the parent thread group. */ if (g == null) { g = parent.getThreadGroup(); } } }
我们能够看到,如果 g 为空,会做这样的处理
如果 security 是空的话,那么这个线程就获取当前线程所属的线程组
所以你想脱离组织自己玩?这种事情想都不要想.
操作系统怎么可能允许有逃离自己掌控之外的存在呢!
OK ,咱们接下来谈另外一个问题.
一个 Thread 必然存在于一个 ThreadGroup , Thread 有自己的优先级, ThreadGroup 也有优先级,如果 Thread 的优先级大于 ThreadGroup 的优先级了,这个时候咋整呢?
public final void setPriority(int newPriority) { ThreadGroup g; checkAccess(); // 如果设置的 priority 大于系统设置的最大值,或者小于系统设置的最小值 // 抛出异常 if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) { throw new IllegalArgumentException(); } if((g = getThreadGroup()) != null) { // 如果设置线程的优先级大于线程组的优先级,则重置线程的优先级为线程组的优先级 if (newPriority > g.getMaxPriority()) { newPriority = g.getMaxPriority(); } setPriority0(priority = newPriority); } }
所以啊,优先级冲突了,两位也别吵吵, Thread 踏踏实实跟着 ThreadGroup 走才有肉吃不是~
看完上面,你可能觉得,哦,原来线程组就是管线程的啊
你如果真的这么认为的话,我赶紧写写接下来的内容,把你的思绪拉一拉
线程组管理的可不单单是线程.
咱们看看源码里面,线程组的成员变量都有啥:
public class ThreadGroup implements Thread.UncaughtExceptionHandler { private final ThreadGroup parent; // 父 ThreadGroup String name; // ThreadGroup 名称 int maxPriority; // 线程最大优先级 boolean destroyed; // 是否被销毁 boolean daemon; // 是否守护线程 boolean vmAllowSuspension; // 是否可以中断 int nUnstartedThreads = 0; // 还未启动的线程 int nthreads; // ThreadGroup 中线程数目 Thread threads[]; // ThreadGroup 中的线程 int ngroups; // 线程组数目 ThreadGroup groups[]; // 线程组数组 }
吼,原来线程组里面还可以有线程组,不单单是有线程,原来还可以控制线程优先级,还可以决定是否销毁线程或者守护线程,或者中断线程.
到这里,咱们来总结一下:
以上,就是想要分享的内容了
感谢您的阅读哇~