public int activeCount():用于获取 group 中活跃的线程,这只是估计值,并不能百分百地保证数字一定正确。
public int activeGroupCount():用于获取 group 中活跃的子 group,这也是一个估计值。该方法会递归获取所有子 group。
public final int getMaxPriority():用于获取 group 的优先级,默认情况下 Group 的优先级未 10,在该group 中,所有线程的优先级都不能大于 group 的优先级。
public final String getName():用于获取 group 的名字。
public final ThreadGroup getParent():用于获取group 的父 group,如果父 group 不存在,则会返回 null,比如 system group 的父 group 就是 null。
public void list():将 group 中所有活跃线程信息全部输出到控制台。
public final boolean parentOf(ThreadGroup g):判断当前 group 是不是给定 group 的父 group,另外如果给定的 group 就是自己本身,返回 true。
public final void setMaxPriority(int pri):指定 group 的最大优先级,最大优先级不能超过父 group 的最大优先级,执行该方法,不仅会改变当前 group 的最大优先级,还会改变所有子 group 的最大优先级。
package concurrent;
import java.util.concurrent.TimeUnit;
public class ThreadGroupBasic {
public static void main(String[] args) {
ThreadGroup group = new ThreadGroup("group1");
Thread thread = new Thread(group, () -> {
while (true) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "thread");
thread.setDaemon(true);
thread.start();
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
System.out.println("activeCount=" + mainGroup.activeCount());
System.out.println("activeGroupCount=" + mainGroup.activeGroupCount());
System.out.println("getMaxPriority=" + mainGroup.getMaxPriority());
System.out.println("getName=" + mainGroup.getName());
System.out.println("getParent=" + mainGroup.getParent());
mainGroup.list();
System.out.println("--------------------------------");
System.out.println("parentOf" + mainGroup.parentOf(group));
System.out.println("parentOf" + mainGroup.parentOf(mainGroup));
}
}
parentOftrue
parentOftrue
线程的最大优先级不能高于所在线程组的最大优先级。
package concurrent;
import java.util.concurrent.TimeUnit;
public class ThreadGroupPriority {
public static void main(String[] args) {
ThreadGroup group = new ThreadGroup("group1");
Thread thread = new Thread(group, () -> {
while (true) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "thread");
thread.setDaemon(true);
thread.start();
System.out.println("group.getMaxPriority()=" + group.getMaxPriority());
System.out.println("group.getPriority()=" + thread.getPriority());
group.setMaxPriority(3);
System.out.println("group.getMaxPriority()=" + group.getMaxPriority());
System.out.println("group.getPriority()=" + thread.getPriority());
}
}
group.getMaxPriority()=10
group.getPriority()=5
group.getMaxPriority()=3
group.getPriority()=5
虽然出现了已经加入该 group 的线程优先级大于 group 最大优先级的情况,但是后面加入该 group 的线程不会再大于新设置的值3.
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/123743474
内容来源于网络,如有侵权,请联系作者删除!