124,524
社区成员
发帖
与我相关
我的任务
分享
题目:查看JVM中线程的名称及其所在组的名称
创建一个类:ThreadList
定义3个方法:
getRootThreadGroups():获得根线程组
getThreads() :获得给定线程组中所有线程名
getThreadGroups():获得线程组中所有线程
线程组:表示一个线程的集合。还有线程组是可以包含其他线程组的。
线程组构成一棵树,除了初始化的线程组外,每个线程组都有一个父线程组。
package basic.example;
import java.util.ArrayList;
import java.util.List;
/**
* Description: 如何描述该类
*
* @author hongzx
* @date 2022/5/28
* @version 1.0
*
* <pre>
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/28 hongzx 2022/5/28 Create
* </pre>
*
*/
public class BasicFor68 {
static class ThreadList{
/**
* 获取根线程组
*
* @return
*/
private static ThreadGroup getRootThreadGroups() {
ThreadGroup rootGroup = Thread.currentThread().getThreadGroup();
while (true) {
if (rootGroup.getParent() != null) {
rootGroup = rootGroup.getParent(); // 获得父线程组
}else{
break;
}
}
return rootGroup;
}
/**
* 获取线程组中所有线程名
*
* @param threadGroup
* @return
*/
public static List<String> getThreads(ThreadGroup threadGroup) {
List<String> threadList = new ArrayList<String>();
Thread[] threads = new Thread[threadGroup.activeCount()];// 获取活动线程数
int count = threadGroup.enumerate(threads, false);//复制线程到线程组
for (int i = 0; i < count; i++) {
threadList.add(threadGroup.getName() + "线程组:" + threads[i].getName());
}
return threadList;
}
/**
* 获取线程组中所有线程
*
* @param threadGroup
* @return
*/
public static List<String> getThreadGroups(ThreadGroup threadGroup) {
List<String> threadList = getThreads(threadGroup);
ThreadGroup[] threadGroups = new ThreadGroup[threadGroup.activeCount()];
int count = threadGroup.enumerate(threadGroups, false);//复制线程到数组
for (int i = 0; i < count; i++) {
threadList.addAll(getThreads(threadGroups[i]));
}
return threadList;
}
public static void main(String[] args) {
for (String str : getThreadGroups(getRootThreadGroups())) {
System.out.println(str);
}
}
}
}