我知道getter也应该同步,但是下面给出了代码
Object get() { return val; }
synchronized void set(Object val) { ... }
Run Code Online (Sandbox Code Playgroud)
编译器如何搞乱一个简单的return语句,这是一个原子的(从mem简单读取)?它与每处理器缓存有关吗?
在这种情况下,声明成员变量val如volatile就足够了.
问题在于可见性.没有内存屏障,无法保证一个线程写入的更改将对另一个线程可见.如果没有障碍,JVM可以进行优化,例如在寄存器中缓存成员变量的值,而不是将更改写入全局可见的主内存.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |