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