防止java中的乱序执行
Posted
技术标签:
【中文标题】防止java中的乱序执行【英文标题】:Prevent out-of-order execution in java 【发布时间】:2013-11-07 23:04:20 【问题描述】:基本上我有以下两个说法:
Project project = projectDao.createProject(...);
projectDao.deleteInProgressEntry(...);
我想确保项目创建完成在 inProgress 条目被删除之前(在执行下一行之前)。这些语句完全相互独立,所以我担心编译器可能不尊重代码中的顺序。
我已经阅读了一些关于 volatile 的内容,并尝试在第一行的开头添加 volatile,这样我就会得到 volatile Project project
。但这不编译。我很难找到我正在寻找的东西,而不会迷失在多线程、原子操作等中。
【问题讨论】:
您有多个Thread
s 吗?如果不忽略您已阅读的所有内容。
【参考方案1】:
语句完全相互独立,所以我担心编译器可能不尊重代码中的顺序。
不,会的。有可能其他线程可能会乱序观察操作的结果——但从执行线程的角度来看,它肯定会按顺序执行。
【讨论】:
很高兴知道。谢谢你。所以我发誓我已经了解到编译器可以重新排序执行流程以进行优化。这仅适用于低级语言还是根本不正确? @jlars62:你只问过Java。我不会尝试应用任何经验法则 - 只需检查您使用的每种语言。请注意,即使在 Java 中,我也稍微简化了一些事情...... 效果 必须与按顺序执行一样,但 JIT 仍然可以以不没关系。你不必担心,因为它真的是无法观察到的。以上是关于防止java中的乱序执行的主要内容,如果未能解决你的问题,请参考以下文章