保证有序性,可见性,原子性与线程安全

synchronized编译成字节码后,是通过monitorenter(lock原子操作抽象而来)和 monitorexit(unlock原子操作抽象而来)两个指令实现的,具体过程如下:
image.png
可以发现,synchronized底层通过获取屏障和释放屏障的配对使用保证有序性,加载屏障和存储屏障的配对使用保正可见性。最后又通过的排他性保障了原子性与线程安全。