当前位置: 代码迷 >> 综合 >> 深入分析 synchronized 的实现原理
  详细解决方案

深入分析 synchronized 的实现原理

热度:3   发布时间:2023-12-18 18:03:51.0

深入分析 synchronized 的实现原理
在这里插入图片描述
记得刚刚开始学习 Java 的时候,一遇到多线程情况就是 synchronized ,相对于当时的我们来说 synchronized 是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。

但是,随着我们学习的进行我们知道 synchronized 是一个重量级锁,相对于 Lock ,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。

诚然,随着 Javs SE 1.6 对 synchronized 进行的各种优化后,synchronized 并不会显得那么重了。下面跟随 LZ 一起来探索 synchronized 的实现机制、Java 是如何对它进行了优化、锁优化机制、锁的存储结构和升级过程。

实现原理

  • synchronized 可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。

Java 中每一个对象都可以作为锁,这是 synchronized 实现同步的基础:

  • 普通同步方法,锁是当前实例对象
  • 静态同步方法,锁是当前类的 class 对象
  • 同步方法块,锁是括号里面的对象

1)同步代码块是使用 monitorenter 和 monitorexit 指令实现的;
2)同步方法(在这看不出来需要看JVM底层实现)依靠的是方法修饰符上的ACC_SYNCHRONIZED 实现。

  相关解决方案