死磕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原理

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理