多线程的run()函数继承问题。 把t=new Thread(); 改为t=new Thread(this);在我的机上是4个,因为main也是一个线程,还有garbage collection也是一个线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 t=new Thread();改成 t=this; 把t=new Thread(); 改为t=new Thread(this);何意? 应该是三个,main一个,你建一个test类,运行test函数,又一个,然后test函数里面新建一个线程,一共三个了。我之行了一下你的程序,可以运行run()的。是这样的,你建立test类,他执行完构造函数后,开始执行run。你最后在构造函数中新建的thread对象,他什么也不会执行,因为它的run是空的。 main 和 test 和那个Thread t。但t已经启动了,输出应该是只有2个线程t 建的是Thread的实例,而Thread的run()方法是空的,等于什么都不做线程就结束了.建立和启动线程: Thread t = new test(); t.start(); Thread(Runnable target) Allocates a new Thread object.表示建一个target类型的thread。 补充,还要加入start方法,才能运行run,(刚才没看见呢) 你是t=new Thread(); 然后start();这个当然不可能调用test类当中的run方法,因为t根本和test没有任何问题 为何t=new Thread(this);就可以了呢? 当然是可以,使用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 就这个程序:我用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没有计算在内吧? Thread.activeCount 仅仅是得到当前线程同一ThreadGroup的活动线程所以如果在main里面去获得是不准确的,你不能肯定当前JVM到底把一些额外的线程有没有放到同一个线程组当中 如果你是指定ThreadGroup来创建线程的,这样才可以保证这个数目的准确性 初学Java,一个简单的程序,错误求教! swing 显示不正常 大家看看这个程序 自己写个链表,查找有问点问题? 如何实现一天之内对用户登录次数作限制? 一个很有趣的题目,打印出一个圆形 有关于JAVA对进程与子进程间操作问题,大家一起来看看 我用是WIN2K,装了J2SDJ1.4.2 和 EditPlus,我怎么设置环境变量?(里面是CSDN上大侠讲的) 在线程的执行过程中,若其执行时间已经超时,如何取消其的执行??? 在applet中的getContentPane()方法怎么找不到? 用华为vas 开发mms接口 我是不是还要与空间商联系啊?
改成 t=this;
何意?
t 建的是Thread的实例,而Thread的run()方法是空的,等于什么都不做线程就结束了.建立和启动线程:
Thread t = new test();
t.start();
Allocates a new Thread object.
表示建一个target类型的thread。
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
单步调试结果:
******************
新建线程t
准备启动线程t
线程是否激活:false
共有2个线程运行结果为:
******************
新建线程t
准备启动线程t
线程是否激活:true
共有3个线程我用Eclipse调试这个程序(同样我修改了楼主的两处)
单步调试结果:
*******************
新建线程t
准备启动线程t
线程是否激活:false
共有3个线程运行结果:
*******************
新建线程t
准备启动线程t
线程是否激活:true
共有4个线程高手告诉我为什么?不会JBuild对garbage collection没有计算在内吧?