繁体   English   中英

java - 在同步块内重新排序

[英]java - reordering inside synchronized block

是否可以在同步块中重新排序语句? 例如

synchronized(lock) {
   statement1;
   statement2;
}

其中,statement1 和 statement2 不相互依赖。 处理器或编译器可以重新排序这些语句吗?

谢谢你。

是的,如果优化器决定,这些语句可以在synchronized块中重新排序。 但是它们不能从synchronized中取出。

编译器(实际上是优化器)可能会重新排序,甚至消除代码(例如分配给在超出范围之前不会被引用的变量),如果它知道肯定不会有副作用并且它会加快速度。 这只会发生在同步块本身内。

根据 JSR-133,同步块内的语句不能重新排序: http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html ,“同步做什么”部分

“线程中的每个动作都发生在该线程中的每个动作之前,这些动作按程序的顺序稍后出现。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM