请解释流量/输出

时间:2014-10-25 01:59:17

标签: java static runnable

很抱歉提出这个基本问题。 我无法理解这个程序的流程。

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

我试图在调试中运行,但我无法理解。有人能帮我理解输出是怎么来的吗?

提前致谢

1 个答案:

答案 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

Demo.