public class hello
{
  static
  { 
   Thread t=Thread.currentThread();
   System.out.println("current:"+t);
   
  }
}运行后 ,还是会出现 thread[main,5,main]但是我们老师说,应该 拉圾收集线程 也存在的,为什么这里看不到呢?要怎么才能看到呢? 请教高手。 

解决方案 »

  1.   

    currentThread是当前线程,又不是所有存在的线程。
      

  2.   

    Thread t=Thread.currentThread();是当前线程
      

  3.   

    因为这个类里没有实例化任何东西,当然没有垃圾回收的线程了,不信你写一个稍微完整一些的class,包含完整的main和构造函数。然后启动运行试试
      

  4.   

    晕,确实不简单,GC线程是属于JVM的吧,如果你有足够的能力也许能看到
      

  5.   

    你只是得到了当前线程,static初始化块好像应该是类载入器执行的,和垃圾回收没关系。
      

  6.   

    下面的程序你可以看到垃圾回收线程:
    线程名为:Finalizer 线程组为:system
    public class GCTest {    /**
         * @param args
         * @throws InterruptedException 
         */
        public static void main(String[] args) throws InterruptedException {
            Thread t=Thread.currentThread();
            System.out.println(t.toString());
            System.out.println(t.getThreadGroup().toString());
            //long l=Long.MAX_VALUE;
            for(long i=0;i<Long.MAX_VALUE;i++){
                MyClass my=new MyClass();
                if(i%10000==0) Thread.sleep(1000);
            }
        }}
    class MyClass { 
        protected void finalize() throws Throwable{
            super.finalize();
            Thread t=Thread.currentThread();
            System.out.println(t.toString());
            System.out.println(t.getThreadGroup().toString());
        }
    }
      

  7.   

    GC线程是JVM的系统线程,我们无法控制
    所以通过在垃圾回收时来获得这个线程环境,也就是finalize方法是被GC线程调用的。
      

  8.   

    可是 super.finalize();这句 你能解释一下吗?
      

  9.   

    super.finalize()的意思是调用父类(Object)的finalize()方法
    这个方法在子类MyClass被 protected void finalize() throws Throwable覆盖了