为什么MyThread的run方法调用如果我传递MyRunnable来创建一个线程。但如果我使用Thread类,我的结果会有所不同。下面的代码让我感到困惑。 请提供任何意见。
public class ThreadDemo {
public static void main(String[] args)
{
new Thread(new MyRunnable()).start();
new MyThread().start();
new MyThread(new MyRunnable()).start();
}
}
class MyThread extends Thread
{
MyThread() {}
MyThread(Runnable r) {super(r); }
public void run()
{
System.out.print(" Inside Thread ");
}
}
class MyRunnable implements Runnable
{
public void run()
{
System.out.print(" Inside Runnable");
}
}
答案 0 :(得分:4)
您的MyThread.run()
方法覆盖了Thread.run()
- 并且Thread.run()
实施调用了传递到run
的{{1}}方法构造函数。正如documented:
如果使用单独的Runnable运行对象构造此线程,则调用该Runnable对象的run方法;否则,此方法无效并返回。
如果您将Runnable
方法更改为:
MyThread.run()
...它将打印" Inside Thread"那么" Inside Runnable"对于最后的通话,即如果您将@Override
public void run()
{
System.out.print(" Inside Thread ");
super.run();
}
方法修改为只是
main
结果将是
new MyThread(new MyRunnable()).start();