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