Thread.currentThread()。setName()是否调用线程运行方法?

时间:2016-11-29 19:23:48

标签: java

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

输出将是 主要, 第一, 第二, MyRunnable

为什么调用Thread.currentThread()。setName(" First");调用run()方法?

1 个答案:

答案 0 :(得分:3)

没有。您所观察到的是race condition。仅仅因为您在Thread构造函数中启动了新的MyRunnable,并不意味着它会在mr.run()方法中的main()调用之前执行。启动线程会产生开销,这需要时间。如果您在Thread.sleep()方法中插入了main(),则输出会发生变化。