不了解线程构造函数、start 和 运行 方法的输出顺序

Don't understand output order of thread constructor, start and run methods

为什么这段代码总是打印这个?

in start oops
in ctor oops 

即使线程已经启动,也不调用 run 方法。当线程首先启动时调用 start 方法然后 运行。

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

这是因为 Thread.start 被覆盖并且从未被实际调用。尝试添加 super.start();至 MyTread.start

首先,您还没有启动 Thread,而是刚刚创建了 class MyThread 的一个实例,它扩展了 Thread.

要启动方法,您需要从 Thread class 调用 start() 方法。在这里你已经覆盖了方法但没有从 super class 调用实际的方法。所以你需要将其修复为:

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)来满足多线程要求。