把t=new Thread(); 改为t=new Thread(this);在我的机上是4个,因为main也是一个线程,还有garbage collection也是一个线程

解决方案 »

  1.   

    t=new Thread();
    改成 t=this;
      

  2.   

    把t=new Thread(); 改为t=new Thread(this);
    何意?
      

  3.   

    应该是三个,main一个,你建一个test类,运行test函数,又一个,然后test函数里面新建一个线程,一共三个了。我之行了一下你的程序,可以运行run()的。是这样的,你建立test类,他执行完构造函数后,开始执行run。你最后在构造函数中新建的thread对象,他什么也不会执行,因为它的run是空的。
      

  4.   

    main 和 test 和那个Thread t。但t已经启动了,输出应该是只有2个线程
    t 建的是Thread的实例,而Thread的run()方法是空的,等于什么都不做线程就结束了.建立和启动线程:
     Thread t = new test();
     t.start();
      

  5.   

    Thread(Runnable target) 
              Allocates a new Thread object.
    表示建一个target类型的thread。
      

  6.   

    补充,还要加入start方法,才能运行run,(刚才没看见呢)
      

  7.   

    你是t=new Thread(); 然后start();这个当然不可能调用test类当中的run方法,因为t根本和test没有任何问题
      

  8.   

    为何t=new Thread(this);就可以了呢?
      

  9.   

    当然是可以,使用new Thread(this);
        public Thread(Runnable target) {
             ....
        }    public void run() {
    if (target != null) {
        target.run();
    }
        }你可以从Thread的源代码当中看到,如果你传递了target对象到Thread当中,Thread也就自动调用target.run这个方法了!!!!!所以Thread t = new Thread(this);
    t.start();在这个时候,内部会调用到了Thread.run方法,在这个方法当中又发现target != null所以结果就等于调用了target.run()即 this.run();a
      

  10.   

    就这个程序:我用JBuildX调试,JBuild首先没有报出activeCount()和sleep()这两个函数是静态的,而楼主是用了t.activeCount()和t.sleep(500)。我把楼主的这两处修改为:Thread.activeCount();和Thread.sleep(500);
    单步调试结果:
    ******************
    新建线程t
    准备启动线程t
    线程是否激活:false
    共有2个线程运行结果为:
    ******************
    新建线程t
    准备启动线程t
    线程是否激活:true
    共有3个线程我用Eclipse调试这个程序(同样我修改了楼主的两处)
    单步调试结果:
    *******************
    新建线程t
    准备启动线程t
    线程是否激活:false
    共有3个线程运行结果:
    *******************
    新建线程t
    准备启动线程t
    线程是否激活:true
    共有4个线程高手告诉我为什么?不会JBuild对garbage collection没有计算在内吧?
      

  11.   

    Thread.activeCount 仅仅是得到当前线程同一ThreadGroup的活动线程所以如果在main里面去获得是不准确的,你不能肯定当前JVM到底把一些额外的线程有没有放到同一个线程组当中 如果你是指定ThreadGroup来创建线程的,这样才可以保证这个数目的准确性