如题

解决方案 »

  1.   

    不能遍历所有进程,最多只能遍历 JVM 进程中的东西。
      

  2.   

        线程池也只是注册了处理任务的线程,并不可能注册所有的线程。
    而且java是间接控制线程,这个问题感觉从os和C的角度考虑其可行性可能更合适。
      

  3.   

        线程的问题也不是很懂   前几天做一个东西用到了线程,一跑就把CPU占满了,还以为是线程满了   结果老大一看就骂我 不是线程的问题,是资源占用     嘿嘿,虽然不懂还是要顶一个 
         楼主给我作证啊,我顶老..
      

  4.   

    线程组中可以打印出其所有线程的瞬时状态。void list(PrintStream out, int indent) {
    int ngroupsSnapshot;
    ThreadGroup[] groupsSnapshot;
    synchronized (this) {
        for (int j = 0 ; j < indent ; j++) {
    out.print(" ");
        }
        out.println(this);
        indent += 4;
        for (int i = 0 ; i < nthreads ; i++) {
    for (int j = 0 ; j < indent ; j++) {
        out.print(" ");
    }
    out.println(threads[i]);
        }
        ngroupsSnapshot = ngroups;
        if (groups != null) {
    groupsSnapshot = Arrays.copyOf(groups, ngroupsSnapshot);
        } else {
    groupsSnapshot = null;
        }
    }
    for (int i = 0 ; i < ngroupsSnapshot ; i++) {
        groupsSnapshot[i].list(out, indent);
    }
        }
      

  5.   

    public static String[] getThreadNames() {   
      ThreadGroup group = Thread.currentThread().getThreadGroup();   
      ThreadGroup parent = null;   
      while ( (parent = group.getParent()) != null ) {   
        group = parent;   
      }   
      Thread[] threads = new Thread[group.activeCount()];   
      group.enumerate(threads);   
      java.util.HashSet set = new java.util.HashSet();   
      for (int i=0; i < threads.length; ++i) {   
        if (threads[i] != null && threads[i].isAlive()) {   
          try {   
            set.add(threads[i].getThreadGroup().getName()+","  
                    +threads[i].getName()+","  
                    +threads[i].getPriority());   
          } catch (Throwable e) {e.printStackTrace();}   
        }   
      }   
      String[] result = (String[]) set.toArray(new String[0]);   
      java.util.Arrays.sort(result);   
      return result;   
    }  
    运行一下结果,然后自由发挥吧。