Synchronized解析——如果你愿意一层一层剥开我的心
前言 synchronized,是解决并发情况下数据同步访问问题的一把利刃。那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟。 Synchronized的使用场景 synchronized关键字可以作用于方法或者代码块,最主要有以下几种使用方式,如图: 接下来,我们先剥开synchronized的第一层,反编译其作用的代码块以及方法 。 synchronized作用于代码块 public class SynchronizedTest { public void doSth(){ synchronized (SynchronizedTest.class){ System.out.println("test Synchronized" ); } } } 反编译,可得: 由图可得,添加了synchronized关键字的代码块,多了两个指令 monitorenter、monitorexit 。即JVM使用monitorenter和monitorexit两个指令实现同步,monitorenter、monitorexit又是怎样保证同步的呢?我们等下剥第二层继续探索。 synchronized作用于方法 public synchronized void doSth(){ System.out.println("test