synchonized
代码:添加synchonized关键字
JVM:monitorenter monitorexit命令(获取monitor监视器)
执行过程中会涉及锁的升级:偏向锁-轻量锁-重量锁
轻量锁会涉及自旋,线程栈获取锁指针
重量锁会涉及内核态获取锁
汇编:lock comxchg命令
volatile:保证线程可见性、禁止指令重排
指令重排:cpu执行命令时乱序执行
volatile
代码:添加volatile关键字
JVM:ACC_VOLATILE命令
执行过程中会涉及内存屏障、MESI
汇编:lock命令