加了ACC_VOLATILE
JVM层面volatile内存区的读写 都加屏障
比如 volatile int i;
当我们i++的时候,i++相当于把i先读出来,给这个读操作上下加一个屏障,写操作上下也加一个屏障,这读操作和写操作是没有同步的,同时也是volatile替代不了synchronized的原因
window:lock指令实现
synchronized的实现原理 字节码层面如果是方法,直接加ACC_SYNCHRONIZED
如果是同步语句块:
有两个MonITOREXIT ,有一个是用于异常退出的
MonITORENTER ~ MonITOREXIT ~ MONITOREXIT
C C++ 调用了操作系统提供的同步机制
OS和硬件层面X86:lock cmpxchg / xxxx (用来锁定指定的,不让其他指令来更改)



