java乱序执行实验

为了对Java代码进行优化,提高执行效率,JVM和编译器对代码进行了优化,有些代码可能会乱序执行。

实验代码如下:

java 复制代码
for (int i = 0; i < Integer.MAX_VALUE; i++) {

    a = 0;
    b = 0;
    x = 0;
    y = 0;

    Thread t1 = new Thread(() -> {
        a = 1;
        x = b;
    }, "t1");

    Thread t2 = new Thread(() -> {
        b = 1;
        y = a;
    }, "t2");

    t1.start();
    t2.start();

    t1.join();
    t2.join();

    if (x == 0 && y == 0) {
        System.out.println("x == 0 && y == 0");
    }
}

如果是顺序执行的话,

情况1:

当执行到x=b时,还未执行b=1,那么b=0,x=0,此时a=1已经执行过了,最后y=1

情况2:

当执行到x=b时,已经执行b=1,那么b=1,x=1,此时a=1已经执行过了,最后y=1

所以x=0或x=1时,y=1

同理y=0或y=1时,x=1

那么不可能出现x与y同时为0的情况

但是实验结果证明代码是乱序执行的,测试15s,控制台打印结果如下:

java 复制代码
x == 0 && y == 0
x == 0 && y == 0
x == 0 && y == 0
x == 0 && y == 0

可以看出15s内出现了4次乱序执行,之所以出现这种情况,就是代码从

java 复制代码
Thread t1 = new Thread(() -> {
	a = 1;
	x = b;
}, "t1");

Thread t2 = new Thread(() -> {
	b = 1;
	y = a;
}, "t2");

变为了

java 复制代码
Thread t1 = new Thread(() -> {
	x = b;
	a = 1;
}, "t1");

Thread t2 = new Thread(() -> {
	y = a;
	b = 1;
}, "t2");
相关推荐
木头程序员几秒前
关于load_data_fashion_mnist函数运行原理以及运行速度慢解决方案
人工智能·python·深度学习·d2l
东离与糖宝10 分钟前
2026 Java AI框架选型:Spring AI/LangChain4j企业级对比
java·人工智能
郝学胜-神的一滴11 分钟前
[力扣 20] 栈解千愁:有效括号序列的优雅实现与深度解析
java·数据结构·c++·算法·leetcode·职场和发展
林姜泽樾11 分钟前
python入门第六课,其他字符串格式化和input
开发语言·python·pycharm
代码改善世界11 分钟前
【C++初阶】手撕C++ string类
java·开发语言·c++
yunpeng.zhou11 分钟前
深度理解agent与llm之间的关系、及mcp与skill的区别
人工智能·python·ai
追雨潮14 分钟前
内存向量检索引擎设计与实现:C# 轻量级 Milvus 替代方案
开发语言·c#·milvus
东离与糖宝16 分钟前
Java AI工程化:PyTorch On Java+SpringBoot微服务部署(2025-2026最新实战)
java·人工智能
隐形喷火龙16 分钟前
CentOS7 基于 FRP 实现 Java Web 服务内网穿透实操记录
java·开发语言
萝卜白菜。17 分钟前
TongWeb8.0支持JBoss Weld‌
java·java-ee