乐趣区

死磕Synchronized实现原理

上篇文章我们已经讲了 Java Lock 类,有兴趣的可以看看:深入 Java Lock 锁,今天我们来学一下 Synchronized,主要有以下知识点:

  • 基本使用
  • 实现机制
  • 同步原理

前言

我们知道在 JDK1.5 之前 synchronized 是一个重量级锁,相对于 j.u.c.Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。

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

基本使用

Synchronized的作用主要有两个:

  • 原子性:确保线程互斥的访问同步代码;
  • 可见性:保证共享变量的修改能够及时可见,其实是通过 Java 内存模型中的 “对一个变量 unlock 操作之前,必须要同步到主内存中;如果对一个变量进行 lock 操作,则将会清空工作内存中 此变量的值,在执行引擎使用此变量前,需要重新从主内存中 load 操作或 assign 操作初始化变量值” 来保证的;

从语法上讲,Synchronized 可以把任何一个非 null 对象作为 ” 锁 ”,在 HotSpot JVM 实现中,锁有个专门的名字:对象监视器(Object Monitor)

实现机制

参考
深入分析 Synchronized 原理

退出移动版