java - 在同步块内重新排序

发布于 2024-11-19 02:57:40 字数 178 浏览 1 评论 0原文

是否可以对同步块内的语句进行重新排序?例如

synchronized(lock) {
   statement1;
   statement2;
}

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

谢谢。

Is it possible for the reordering of statements inside a synchronized block ? For example

synchronized(lock) {
   statement1;
   statement2;
}

In which, statement1 and statement2 are not dependent on each other. Can the processor or compiler reorder these statements ?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ゝ杯具 2024-11-26 02:57:40

是的,如果优化器决定的话,这些语句可以在同步块内重新排序。但它们不能脱离同步

Yes these statements can be reordered within synchronized block if optimizer decides so. But they can't be taken out of synchronized.

谷夏 2024-11-26 02:57:40

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

The compiler (optimizer, actually) might reorder things, or even eliminate code (like assigning to a variable that is not going to be referenced before going out of scope) if it knows of a certainty that there would be no side effects and it would speed things up. That will only happen within the synchronized block itself.

中二柚 2024-11-26 02:57:40

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

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

According to JSR-133, statements inside the synchronized block can not be reordered:
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html, "What does synchronization do" section

"Each action in a thread happens before every action in that thread that comes later in the program's order."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文