同步是否会阻止重新排序?
它可以防止重新排序。您仍然可以在同步块外部和同步块内部进行重新排序,但不能从同步块内部对其进行重新排序。
a,b和c之间没有依赖关系。
没关系。
先分配给b然后再分配给c?
是。但是,如上所述,并非所有JVM都可以保证。(见下文)
如果我还没有同步,则可以用JVM选择的任何方式对语句重新排序?
是的,由JVM和/或CPU指令优化器和/或CPU高速缓存提供,但是由于没有明显的理由怀疑改变a = 5的顺序,因此不太可能。和b = 5; 将提高性能。
您将看到的是缓存可见性的更改。即另一个读取这些值的线程可能会看到b = 5; 在a = 5之前; 例如,如果它们还没有同步,则它们位于不同的缓存行中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)