如果加上one.start();就不会出问题了说明g.activeCount()得到的是当前线程组里面有多少个线程而g.enumerate(gAll);只列出isAlive()的线程,这样就会出问题activeCount()这个方法有点问题!!!!!!!!!

解决方案 »

  1.   

    是g.enumerate(gAll)的原因,侯捷网站上对Think in Java 2nd的勘误表上有人提到。看看吧:http://www.jjhou.com/errata-tij2.txt.htm
      

  2.   

    bluesmile979(笑着)   说的有一定的道理!但是,什么样的线程才算isAlive()呢?是创建了,是正在运行,是运行完了?
      

  3.   

    是java本身activeCount()与enumerate()不统一的问题.就我所见, activeCount()只给出了线程的数量,而enumerate则是运行中的线程. 我跟踪了一下Code,ThreadGroup中每产生一个线程, activeCount()都会加一,而enumerate的线程需要是在运行中的.以你的例子,Thread[one,5,x]并不在运行中,所以...我跟踪的是1.4.0,是否不同的JDK有不同的实现?