gpt4 book ai didi

java - 如何防止语句被 JVM 重新排序

转载 作者:行者123 更新时间:2023-11-29 03:23:42 25 4
gpt4 key购买 nike

有没有办法保证doA先于doB执行?我想到的一件事是将每个语句包装在一个同步块(synchronized block)中。

object1.doA();
object2.doB();

对 volatile 变量的方法调用是否充当 volatile 写入?

编辑 - 我真正需要的是让其他线程在 doB 之前看到 doA 的效果。

最佳答案

从执行该段代码的线程的角度来看,这些语句不会重新排序(它们在实践中可能会重新排序,但前提是从该线程的角度来看重新排序没有影响)。

然而,另一个线程可能会在看到 doA 的结果之前看到 doB 的结果。如果这是一个问题,您应该锁定代码以使其成为原子代码,例如通过使用 synchronized block 。

请注意,使用两个 synchronized block 并没有取得多大效果 - 特别是 JVM 很可能无论如何都会将它们合并为一个(假设它们使用相同的监视器,但如果它们不这样做)那么你不一定会实现原子性)。

关于java - 如何防止语句被 JVM 重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com