[英]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.