https://www.cnblogs.com/duanxz/p/4494831.html

通过前面的篇章我们知道 synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块。

一、原子性

原子性:既然同一时间只有一个线程去运行里面的代码,那么这个操作就是不能被其它线程打断的,所以这里天然就具有原子性了。

Untitled

二、可见性

我们继续来说 synchronized 是怎么保证可见性的?

synchronized 也是通过内存屏障保证可见性的。之前我们讲volatile的时候说过。

synchronized 关键字也是通过内存屏障来保证可见性的。我们都知道 synchronized 底层是通过 monitorenter 的指令来进行加锁的、通过 monitorexit 指令来释放锁的。

但是很多人都不知道的一点是,