在MyRunnable中运行方法不调用

时间:2014-03-18 18:29:37

标签: java multithreading

为什么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"); 
    } 
} 

1 个答案:

答案 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();