Java 关于Runnable和Thread的混淆

Java 关于Runnable和Thread的混淆,java,multithreading,Java,Multithreading,我知道这是一件很小的事情,对于所有的程序员来说都很容易,但是我被卡住了。我无法理解为什么这个代码段打印出“Dog”而不是“Cat” 在线程对象上调用start()会导致JVM生成一个新的系统线程,然后继续调用run方法。其默认实现如下所示: private Runnable target; // This is what you passed to the constructor @Override public void run() { if (target != null) {

我知道这是一件很小的事情,对于所有的程序员来说都很容易,但是我被卡住了。我无法理解为什么这个代码段打印出“Dog”而不是“Cat”

线程
对象上调用
start()
会导致JVM生成一个新的系统线程,然后继续调用
run
方法。其默认实现如下所示:

private Runnable target; // This is what you passed to the constructor

@Override
public void run() {
  if (target != null) {
    target.run();
  }
}
由于您在匿名
线程
子类声明中重写了这个方法,因此从未调用过这个代码,并且您注入的
可运行
也从未使用过

另外,只要可能,请将代码放在
Runnable
s中

private Runnable target; // This is what you passed to the constructor

@Override
public void run() {
  if (target != null) {
    target.run();
  }
}