【多執行緒】檢視JVM中的執行緒名(ThreadGroup)
阿新 • • 發佈:2019-02-16
ThreadGroup類的常用方法
activeCount()——返回此執行緒組中活動執行緒的估計數
activeGroupCount()——返回此執行緒組中活動執行緒組的估計數
enumerate(Thread[] list,boolean recurse)——把此執行緒組中所有活動執行緒複製到指定陣列中
enumerate(ThreadGroup[] list,boolean recurse)——把對此執行緒中的所有活動子組的引用複製到指定陣列中
getName()——返回此執行緒組的名稱
getParent()——返回此執行緒組的父執行緒組
/** * 獲得根執行緒組 * @return */ private static ThreadGroup getRootThreadGroups(){ //獲得當前執行緒組 ThreadGroup rootGroup =Thread.currentThread().getThreadGroup(); while(true){ //如果getParent()方法的返回值非空則不是根執行緒組 if(rootGroup.getParent()!=null){ //獲得父執行緒組 rootGroup=rootGroup.getParent(); }else{ //如果到達根執行緒組則退出迴圈 break; } } //返回根執行緒組 return rootGroup; } /** * 獲得給定執行緒組中所有執行緒名 * @param group * @return */ public static List<String> getThreads(ThreadGroup group){ //建立儲存執行緒名的列表 List<String> threadList=new ArrayList<String>(); //根據活動執行緒數建立執行緒陣列 Thread[] threads=new Thread[group.activeCount()]; //複製執行緒到執行緒陣列 int count=group.enumerate(threads,false); //遍歷執行緒陣列將執行緒名及其所在組儲存到列表中 for(int i=0;i<count;i++){ threadList.add(group.getName()+"執行緒組:"+threads[i].getName()); } //返回列表 return threadList; } /** * 獲得執行緒組中子執行緒組 * @param group * @return */ public static List<String>getThreadGroups(ThreadGroup group){ //獲得給定執行緒組中執行緒名 List<String> threadList=getThreads(group); //建立執行緒組陣列 ThreadGroup[] groups=new ThreadGroup[group.activeGroupCount()]; //複製子執行緒組到執行緒組資料 int count=group.enumerate(groups,false); //遍歷所有子執行緒組 for(int i=0;i<count;i++){ //利用getThreads()方法獲得執行緒名列表 threadList.addAll(getThreads(groups[i])); } //返回所有執行緒名 return threadList; } public static void main(String[] args) throws InterruptedException { for(String string:getThreadGroups(getRootThreadGroups())){ //遍歷輸出列表中的字串 System.out.println(string); } }
結果: