如果在Thread构造函数中传递no-arg并且不扩展Thread类,该怎么办?

时间:2018-04-05 18:34:18

标签: java multithreading java-threads

如果我这样做,后台会发生什么:

class TestThread {
     public static void main(String[] args) {
         Thread t = new Thread();
         t.start();

         System.out.println(t.getName());
     }
}

我知道要创建新线程,您必须通过扩展run()类或实现Thread接口来覆盖Runnable方法。

如果我们实现Runnable接口,我们必须提供目标运行方法,其中提供了必须同时运行的代码。

此外,如果我们不覆盖run()方法并且不扩展Thread或实现Runnable,则main()线程将执行。

我想知道在执行上述代码时后台究竟会发生什么?主要的run()方法是否与其他Thread一样?除了Thread线程之外,这会创建一个新的main吗?

2 个答案:

答案 0 :(得分:1)

/**
 * If this thread was constructed using a separate
 * Runnable run object, then that
 * Runnable object's run method is called;
 * otherwise, this method does nothing and returns.
 * 
 * Subclasses of Thread should override this method.
 */
public void run() {
    if (target != null) {
        target.run();
    }
}

由于您尚未设置Runnable目标,因此不会发生任何事情。

  

主要的run()方法是否与其他Thread一样?

低级API可用于此目的。他们不一定需要创建Thread实例来运行线程。这是一个很好的讨论:How main thread created by Java?

答案 1 :(得分:0)

创建新线程,启动,执行空*方法,然后终止。

*)并非真空:

public void run() {
    if (target != null) {
        target.run();
    }
}