Pac*_*ier 6 java polymorphism multithreading overriding
在Java文档指出,如果我们提供一个Runnable 对象创建一个新的线程时,.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();
}
}
Run Code Online (Sandbox Code Playgroud)
use*_*421 16
因为您重写了Thread.run()方法.
这是Thread.run()的实现:
@Override
public void run() {
if (target != null) {
target.run();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试:
}) {
@Override
public void run() {
super.run(); // ADD THIS LINE
System.out.println("b");
}
}.start();
Run Code Online (Sandbox Code Playgroud)
你会得到的ab
.
默认实现是调用Runnable.但是,您要覆盖默认实现,而不是调用runnable.解决这个问题最简单的方法是
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("a");
}
}) {
@Override
public void run() {
super.run(); // call the default implementation.
System.out.println("b");
}
}.start();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5067 次 |
最近记录: |