用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 列出所有线程的信息

2012-11-23 作者: 程序猿style举报

[java]代码库

public class ListAllRunningThread {
    /**
     * 列出所有线程的信息
     */
    public static void list(){
        //获取当前线程所属线程组的父线程组
        ThreadGroup root = Thread.currentThread().getThreadGroup().getParent();
        //不断循环,直到找到根线程组
        while (root.getParent() != null) {
            root = root.getParent();
        }
        //访问根线程组下的线程
        visit(root, 0);
    }
    /**
     * 递归的显示线程组中的线程
     * @param group
     * @param level
     */
    private static void visit(ThreadGroup group, int level) {
        // 获取group线程组中活动线程的估计数
        int numThreads = group.activeCount();
        Thread[] threads = new Thread[numThreads];
        // 把此线程组中的所有活动线程复制到指定数组中。
        // false表示不包括作为此线程组的子组的线程组中的线程。
        numThreads = group.enumerate(threads, false);
     
        // 遍历活动线程数组,打印它们的名字
        for (int i=0; i<numThreads; i++) {
            // Get thread
            Thread thread = threads[i];
            for (int j=0; j<level; j++){
                System.out.print("  ");
            }
            System.out.println("" + thread.getName());
        }
     
        // 获取group线程组中活动子线程组的估计数
        int numGroups = group.activeGroupCount();
        ThreadGroup[] groups = new ThreadGroup[numGroups];
        // 把对此线程组中的所有活动子组的引用复制到指定数组中。
        numGroups = group.enumerate(groups, false);
     
        // 递归的访问子线程组中的线程
        for (int i=0; i<numGroups; i++) {
            visit(groups[i], level+1);
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        //建立一个线程组
        ThreadGroup group1 = new ThreadGroup("ThreadGroup-1");
        //建立3个线程并启动
        Thread[] threads1 = new Thread[3];
        for (int i=1; i<4; i++){
            //新的线程属于group1线程组,以ThreadA为运行对象,名字为"group1-ThreadA-i"
            threads1[i-1] = new Thread(group1, new ThreadA(i*2000), "group1-ThreadA-" + i);
            threads1[i-1].start();
        }
        //建立另一个线程组,属于group1线程组
        ThreadGroup group2 = new ThreadGroup(group1, "ThreadGroup-2");
        //建立3个线程并启动
        Thread[] threads2 = new Thread[3];
        for (int i=1; i<4; i++){
            //新的线程属于group2线程组,以ThreadA为运行对象,名字为"group2-ThreadA-i"
            threads2[i-1] = new Thread(group2, new ThreadA(i*1000), "group2-ThreadA-" + i);
            threads2[i-1].start();
        }
        //列出所有活动的线程的名字
        System.out.println("当前虚拟机中所有正在运行的线程:");
        ListAllRunningThread.list();
    }
     
    static class ThreadA extends Thread{
        private long sleepTime = 100;
        public ThreadA(long time){
            this.sleepTime = time;
        }
        public void run(){
            try {
                Thread.sleep(this.sleepTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...