同步关键字会阻止Java中的重新排序吗?

同步关键字会阻止Java中的重新排序吗?,第1张

同步关键字会阻止Java中的重新排序吗?

同步是否会阻止重新排序?

它可以防止重新排序。您仍然可以在同步块外部和同步块内部进行重新排序,但不能从同步块内部对其进行重新排序。

a,b和c之间没有依赖关系。

没关系。

先分配给b然后再分配给c?

是。但是,如上所述,并非所有JVM都可以保证。(见下文)

如果我还没有同步,则可以用JVM选择的任何方式对语句重新排序?

是的,由JVM和/或CPU指令优化器和/或CPU高速缓存提供,但是由于没有明显的理由怀疑改变a = 5的顺序,因此不太可能。和b = 5; 将提高性能。

您将看到的是缓存可见性的更改。即另一个读取这些值的线程可能会看到b = 5; 在a = 5之前; 例如,如果它们还没有同步,则它们位于不同的缓存行中。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5020763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存