基于工作原理一可知同步关键字底层是基于JVM操作监视器的同步指令原语monitorenter和monitorexit来实现,这次将会通过抽象的内存语义来说明侧面说明加锁和解锁的方式
1....在JMM规范中为了解决这类内存共享的数据在不同线程不可见的问题,就制定一种规范来强制java程序中的线程直接跳过CPU高速缓存数据去读取主内存的数据,这就是解决内存数据的不可见的一种手段.
2. synchronized...内存语义的理解
内存语义小结
基于上述代码的执行结果可以看出,我们使用synchronized块内的共享变量将从线程的工作内存中清除或者称为失效,此时程序就不会从工作内存中进行读取数据,而是直接从主内存中读取数据...,从而保证缓存数据的强一致性
由此可知道,synchronized从内存语义上可以解决共享变量的内存可见性问题
从另一个角度而言,使用synchronized相当于jvm获取monitorenter的指令...,此时会将该共享变量的缓存失效直接从主内存中加载数据到锁块的内存中,同时在进行monitorexit操作的指令时会将锁块的共享变量数据刷新到主内存中
synchronized不足
使用monitor的方式是属于