【问题标题】:Please explain the flow/output请解释流量/输出
【发布时间】:2023-03-24 16:21:01
【问题描述】:

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

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

我尝试在调试中运行,但我无法理解。有人可以帮助我了解输出是如何产生的吗?

提前致谢

【问题讨论】:

  • 如果你不理解这个简单的代码,你可以考虑阅读和学习更多。

标签: java static runnable


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2015-07-13
    • 2012-02-21
    • 2015-03-28
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多