通过扩展线程类创建线程时的混淆

时间:2016-05-12 06:47:11

标签: java multithreading

我们知道我们可以通过创建一个扩展线程然后创建该线程实例的新类来创建一个新线程。在阅读本主题时,我在本书中看到了一个如下例子。

 class NewThread extends Thread{
    NewThread(){
        super("demo thread");
        System.out.println("child thread:"+this);
        start();
    }
    public void run(){
        try{
            for(int i=5;i>0;i--){
                System.out.println("child thread"+i);
                Thread.sleep(500);
            }
         } catch(InterruptedException e){
             System.out.println("child interrupted");
         }
         System.out.println("exiting child thread");
      }
  }

在这个例子中,我能够理解除了构造函数部分之外的所有东西,我们没有使用任何实例(线程)来调用start()。所以我的问题是如何在没有任何线程的情况下调用start()方法。

4 个答案:

答案 0 :(得分:1)

您正在继承NewThread类扩展的类Thread中的start()方法。所以你可以像任何其他方法一样调用它。

run()方法也是如此,它可以使用@Override注释来使继承的概念更清晰。

@Override
public void run() {
        try{
            for(int i = 5; i > 0; i--) {
                System.out.println("child thread" + i);
                Thread.sleep(500);
            }
        } catch(InterruptedException e) {
           System.out.println("child interrupted");
        }
        System.out.println("exiting child thread");
    }

答案 1 :(得分:0)

它是有效的,因为方法start()是从Thread类继承的,所以你可以像任何其他类方法一样调用它。

答案 2 :(得分:0)

在刚刚在此构造函数中创建的线程实例上调用此start()方法。

答案 3 :(得分:0)

以下代码负责在start()构造函数中的NewThread实例上调用NewThread方法,该构建函数调用start()类中的Thread方法,该方法调用{ {1}}方法。

run()

流速:

 NewThread(){
    super("demo thread");
    System.out.println("child thread:"+this);
    start();
}

有关NewThread() -> start() -> Thread start() -> native start0() -> run() Thread方法的内部信息,请参阅此SE问题:

What's the difference between Thread start() and Runnable run()