线程名称和调用run方法两次

时间:2014-10-29 19:52:49

标签: java multithreading main runnable

我正在学习,我在样本测试中看到了以下内容。 我不太清楚为什么下面的代码打印"首先"。

当我调试时,似乎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());
    }
}

2 个答案:

答案 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方法。