Java docs说明如果我们在创建新线程时提供一个 Runnable target,该线程的 .start()
将运行 run()
方法提供的可运行。
如果是这样的话,这个测试代码不应该打印“a”(而不是打印“b”)吗?
public class test {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("a");
}
};
Thread t = new Thread(r) {
@Override
public void run() {
System.out.println("b");
}
};
t.start();
}
}
最佳答案
因为你覆盖了Thread.run()方法。
这里是 Thread.run() 的实现:
@Override
public void run() {
if (target != null) {
target.run();
}
}
尝试:
}) {
@Override
public void run() {
super.run(); // ADD THIS LINE
System.out.println("b");
}
}.start();
你会得到ab
。
关于java - 为什么 java.lang.Thread 在启动时不调用其显式 java.lang.Runnable 的 run() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619091/