Java 线程名和调用run方法两次
我正在学习我在样本测试中看到的以下内容。 我不太清楚为什么下面的代码打印“第一” 调试时,MyRunnable.run似乎被调用了两次。 这是否意味着即使在其他场景中,run方法也总是被调用两次Java 线程名和调用run方法两次,java,multithreading,main,runnable,Java,Multithreading,Main,Runnable,我正在学习我在样本测试中看到的以下内容。 我不太清楚为什么下面的代码打印“第一” 调试时,MyRunnable.run似乎被调用了两次。 这是否意味着即使在其他场景中,run方法也总是被调用两次 public class currentThreadName { public static void main(String[] args) { Thread.currentThread().setName("First"); MyRunnable mr =
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()
和新线程(这个,名称).start()代码>是的,它运行了两次
我建议您只使用start
来执行新线程。为什么?
因为如果直接调用run()
,它将在调用线程上执行(与任何其他方法调用一样)
但是,如果调用Thread.start()
,它将实际创建一个新线程,以便并行执行runnable的run方法。Thnx但是为什么“first”总是先打印还是在“MyRunnable”打印之前打印?当调用.start()时,我们不知道何时执行它,这是真的吗?因为JVM不保证任何“第一个”首先打印,因为它在代码的其余部分之前执行。您的第二条语句是正确的,如果两个线程同时处于活动状态,则不能保证哪个线程将首先运行。