为什么这段代码总是打印出来?
in start oops
in ctor oops
即使线程已经启动,也不会调用run
方法。当线程首先启动时,启动方法调用然后运行。
class MyThread extends Thread {
public MyThread(String name) {
this.setName(name);
start();
System.out.println("in ctor " + getName());
}
public void start() {
System.out.println("in start " + getName());
}
public void run() {
System.out.println("in run " + getName());
}
}
class Test {
public static void main(String []args) {
new MyThread("oops");
}
}
答案 0 :(得分:2)
这是因为Thread.start被覆盖并且实际上从未被调用过。尝试添加super.start();到MyTread.start
答案 1 :(得分:0)
首先,你还没有开始Thread
,而是刚刚创建了一个扩展Thread
的MyThread类的实例。
要启动方法,您需要从start()
类调用Thread
方法。在这里你重写了方法但没有从超类调用实际方法。所以你需要解决这个问题:
public class Test {
public static void main(String[] args) {
Thread myThread = new MyThread("oops");
myThread.start();
}
}
class MyThread extends Thread {
public MyThread(String name) {
this.setName(name);
this.start();
System.out.println("in ctor " + getName());
}
public void start() {
super.start();
System.out.println("in start " + getName());
}
public void run() {
super.run();
System.out.println("in run " + getName());
}
}
在旁注中,您应该始终倾向于实施Runnable
(或Callable
)以满足多线程要求。