线程名称和调用运行方法两次



我正在学习,我在样本测试中看到以下内容。我不太确定为什么下面的代码打印"第一"。

当我调试时,似乎MyRunnable.run被调用了两次。即使在其他情况下,此 mean run 方法是否总是被调用两次?

public class currentThreadName {
    public static void main(String[] args) {
        Thread.currentThread().setName("First");
        MyRunnable mr = new MyRunnable("MyRunnable");
        mr.run();       
    }
}
class MyRunnable implements Runnable {
    MyRunnable(String name) {
        new Thread(this, name).start();
    }
    public void run(){
        System.out.println(Thread.currentThread().getName());
    }
}

run 方法被调用两次。

一个调用是在MyRunnable构造函数中调用start();这是在单独的线程中执行的。 那打印"MyRunnable"。

但是,您也可以直接在 main 中调用 run,它在主线程中执行。 这负责输出"First",因为您将名称"First"分配给了主线程。

通常,您不应该直接呼叫run;只能呼叫start。 这将在新线程中调用run

您正在调用mr.run();new Thread(this, name).start();所以是的,它正在运行两次。

我建议您只使用 start 来执行新线程。为什么?

因为如果你只是直接调用run(),它将在调用线程上执行(就像任何其他方法调用一样(。

但是,如果调用Thread.start()实际上会创建一个新线程,以便并行执行可运行的 run 方法。

相关内容

  • 没有找到相关文章

最新更新