我们可以重写Java中的start()方法吗?

时间:2020-01-09 10:35:06  来源:igfitidea点击:

我们可以覆盖Java中的start()方法。由于这是我们几乎不需要执行的操作,因此有些人会犹豫,实际上是否可以覆盖Thread类的start()方法。还有一个后续问题,我们重写的start()方法是否实际执行线程并调用run()方法。

Java中的覆盖start方法

是的,可以在Java中重写Thread类的start()方法。尽管几乎不需要这样做,但在极少数情况下,确实需要在调用run()方法之前执行一些逻辑。

从覆盖的start()方法中,确保我们调用super.start()方法,因为Thread类的start()方法是本机方法,并且具有与操作系统进行通信以安排线程运行的逻辑。未能调用super.start()将意味着不会调用run()方法。

覆盖 start方法示例代码

public class MyThread extends Thread {
  @Override
  public void start(){
    System.out.println("In overridden start method");
    // calling parent class start method
    super.start();
  }

  @Override
  public void run() {
    System.out.println("In run method " + "Thread Name - " 
        + Thread.currentThread().getName());
  }

  public static void main(String[] args) {
    Thread t1 = new MyThread();
    t1.start();
  }
}

输出:

In overridden start method
In run method Thread Name - Thread-0