我正在学习,我在样本测试中看到以下内容。我不太确定为什么下面的代码打印"第一"。
当我调试时,似乎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 方法。