我正在学习,我在样本测试中看到了以下内容。 我不太清楚为什么下面的代码打印"首先"。
当我调试时,似乎MyRunnable.run被调用了两次。 这是否意味着即使在其他情况下,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());
}
}
答案 0 :(得分:2)
run
方法被调用两次。
通过在start()
构造函数中调用MyRunnable
进行一次调用;这是在单独的线程中执行的。打印" MyRunnable"。
但是,您也可以直接在run
中调用main
,这是在主线程中执行的。由于您分配了名称" First"到主线程。
通常情况下,您不应直接致电run
;仅拨打start
。这将在新主题中调用run
。
答案 1 :(得分:1)
您正在呼叫mr.run();
和new Thread(this, name).start();
,所以是的,它正在运行两次。
我建议您只使用start
来执行新主题。为什么呢?
因为如果你直接调用run()
,它将在调用线程上执行(就像任何其他方法调用一样)。
但是,如果你致电Thread.start()
,会实际创建一个新主题,以便并行执行runnable的run方法。