1

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

in start oops
in ctor oops 

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

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

2 回答 2

2

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

于 2015-05-02T06:23:59.847 回答
0

首先,您还没有开始Thread这样,而是您刚刚创建了扩展类 MyThread 的一个实例Thread

要启动一个方法,您需要start()Thread类中调用方法。在这里,您已经覆盖了方法,但没有从超类调用实际方法。因此,您需要将其修复为:

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

于 2015-05-02T06:47:03.527 回答