很抱歉提出这个基本问题。 我无法理解这个程序的流程。
public class ThreadTest {
private static String msg = "HCL";
static {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
msg = "Technologies";
}
});
t.start();
}
public static void main(String[] args) {
System.out.println(msg);
}
}
输出
HCL
我试图在调试中运行,但我无法理解。有人能帮我理解输出是怎么来的吗?
提前致谢
答案 0 :(得分:1)
这是您的经典竞争条件:main
在静态初始化程序中启动的线程更改之前打印该值。
如果您再添加一点等待并再次打印msg
,您将看到不同的输出:
public static void main(String[] args) throws Exception {
System.out.println(msg);
Thread.sleep(1000);
System.out.println(msg);
}
打印
HCL
Technologies