小白问一个 Java 线程 jmm 的问题

2020-03-06 22:15:08 +08:00
 liliumss

小弟正在学 java jmm 知识,做了个实验代码和执行结果如下,启动了 2 个线程来看共享的 count 变量是否被线程共享,按照 jmm 理论 线程应该会加载公共变量到自己的线程,互相不影响,咋执行结果线程 2 赋值后,线程 1 就不++了,往指点,谢谢了

public class Test {
    private static Long count = 0L;
    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            System.out.println("Thread1 start");
            while (count < 10000L) {
                count++;
                System.out.println("Thread1 count:" + count);
            }
            System.out.println("Thread1 end");
        }).start();

        new Thread(() -> {
            System.out.println("Thread2 start");
            count = 10000L;
            System.out.println("Thread2 count:" + count);
            System.out.println("Thread2 end");
        }).start();
    }
}

执行结果

Thread1 start
Thread1 count:1
Thread2 start
Thread1 count:2
Thread1 end
Thread2 count:10000
Thread2 end

3101 次点击
所在节点    Java
22 条回复
liliumss
2020-03-07 19:36:16 +08:00
@sagaxu 谢谢 学习了
az467
2020-03-08 13:38:20 +08:00
@liliumss 一般的就是 JSR133 和其他的官方文档,书籍的话就是《 Java 并发编程实践》这种。
如果要深入分析,那就需要科班的基础知识(编译、汇编、操作系统、硬件等)和一些直觉与经验,还要对 JVM 有一定的了解,这就不是光看文档能学会的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/650554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX