java中线程的一个问题
发布网友
发布时间:2023-04-04 08:48
我来回答
共4个回答
热心网友
时间:2024-12-03 04:12
这就是我们常说的多态。
我简单的说一下线程的执行原理(只说楼主关心的这一点,要全说完,我没这样的能力)。
其实Thread类用了一个代理,原理如下:
public class Thread implements Runnable{
private Runnable runnable;
public Thread(){}
public Thread(Runnable run){
this.runnable=run;
}
public void run(){
runnable.run();
}
}
/*当你重写了Thread 的run()方法,原来的当然失效了;注意呀,16行这里new 的不是Thread这个类的实例,而是一个继承了Thread 的匿名内部类,并且这个类重写了run()方法;*/
热心网友
时间:2024-12-03 04:12
Thread t=new Thread(r)
是声明t 为一个r线程, 写到此, 确实如果t开始执行的话, 就会打印出Cat, 但是它使用匿名内部类的方法, 对这个线程对象重写类体了, 而且在run 方法中没有调用super.run(). 所以只打印自己的, 没有打印r的, 如果加上super.run(), 就会打印出Cat, 先打印还是后打印, 由代码顺序决定.
热心网友
时间:2024-12-03 04:13
因为你启动是线程t : t.start();
t指向了一个匿名内部类,Thread本身实现了runnable,默认实现在run实现中调用参数r的run,这个匿名内部类重新实现了run方法,所以打印的就是Dog
热心网友
时间:2024-12-03 04:13
不是 t.start()吗。t进程开始执行,而 r没执行