Java锁 - 导读

目录

目录

常用锁

  • synchronized
  • ReentrantLock
  • ReadWriteLock
  • Semaphore

常用锁的介绍可参见:Java常用锁机制简介

synchronized

了解

对于初学者,想了解synchronized的使用的话,可以参考Java中synchronized的用法

总结

  • 按加锁范围大小,分为类锁对象锁
  • 按加锁方法,分为代码块加锁方法加锁

关于类锁对象锁需要着重区分下。对象锁只会影响单个对象,而类锁会影响该类下所有的对象。

进阶

synchronized进阶学习的话,需要了解下其实现原理:Synchronized及其实现原理

总结

  • 每个对象都有个monitor对象,加锁就是在竞争monitor对象
  • 代码块加锁是在前后分别加上monitorentermonitorexit指令来实现的
  • 方法加锁是通过一个标记位来判断的

再进阶

关于“synchronized比较慢”的误解

在Java1.5中,synchronized是一个重量级操作,需要调用操作系统相关接口,性能是低效的,有可能给线程加锁消耗的时间比有用操作消耗的时间更多。到了Java1.6,synchronized进行了很多的优化,有适应自旋、锁消除、锁粗化、轻量级锁及偏向锁等,效率有了本质上的提高。在之后推出的Java1.7与1.8中,均对该关键字的实现机理做了优化。

关于锁的优化,可以参考

总结

  • 引入了偏向锁轻量级锁。都是在对象头中有标记位,不需要经过操作系统加锁
  • 锁可以从偏向锁升级到轻量级锁,再升级到重量级锁。这种升级过程叫做锁膨胀
  • JDK 1.6中默认是开启偏向锁和轻量级锁,可以通过-XX:-UseBiasedLocking来禁用偏向锁

ReentrantLock

了解

对于初学者,了解ReentrantLock,可通过参考ReentrantLock的使用
ReentrantLock的使用还是比较简单的

进阶

要深入理解ReentrantLock,就需要知道其实现原理。参考文章:

总结

  • ReentrantLock是通过大名鼎鼎的AQS来实现的。弄懂了AQS,就弄懂了ReentrantLock
  • ReentrantLock分为公平锁非公平锁

引申
除了ReentrantLockCountDownLatchSemaphore也是通过AQS实现的。关于AQS,可参考未完待续...

synchronized和ReentrantLock的对比

synchronizedReentrantLock的对比是个永恒的话题。这两个常用的加锁方式有同有异,互为补充。ReentrantLock的出现不是为了替代synchronized,而是弥补synchronized的不足。

关于synchronizedReentrantLock的异同,网上的文章多如牛毛。比较好的有:

总结

  • synchronized能做的,ReentrantLock都能做,并且还能做更多。但是synchronized依然有用武之地
  • ReentrantLock相比synchronized的优势是可中断、公平锁、多个锁。这种情况下需要使用ReentrantLock。只要是synchronized能做到的,还是使用synchronized

锁分类

Java中的锁有很多概念和术语,如可重入锁、公平锁、偏向锁等。这些术语中,有些指的是同一种锁,有些是表示的锁的特征。如synchronized同时是可重入锁、非公平锁、互斥锁等。

这些术语只是从不同的纬度来描述锁的应用场景。只有了解的这些术语,术语所指代的特征,以及常用锁跟这些特征的关系,才能熟练并且合理地使用锁。

可重入锁

参考可重入锁

总结

  • 不可重入的话,一个锁在嵌套中使用会把自己锁死
  • synchronizedReentrantLock都是可重入锁,可放心使用

公平锁/非公平锁

参考Java多线程公平锁与非公平锁

总结

  • synchronized是非公平锁,ReentrantLock默认构造函数也是非公平锁
  • 非公平锁的性能比公平锁要高很多

互斥锁/共享锁

参考java并发-独占锁与共享锁

总结

  • 互斥和共享的概念比较简单,并且在任何语言中都存在

悲观锁/乐观锁

参考Java高效并发之乐观锁悲观锁

总结

  • 悲观锁和乐观锁并非是一种实际的锁,而是指一种加锁的概念
  • 这种也并非java独有,在其他语言和数据库中都有广泛的应用
  • 悲观锁在java中一般指代常见的各种锁
  • 乐观锁在java中一般指代CAS操作

偏向锁/轻量级锁/重量级锁

参考:

总结

  • 偏向锁、轻量级锁是针对重量级锁做优化而提出来的概念和实施方案
  • 这些优化大部分情况下对于开发来讲是透明的,默认开启

分段锁

参考java多线程 -- ConcurrentHashMap 锁分段机制

总结

  • 分段锁也并非一种实际的锁,而是一种思想
  • ConcurrentHashMap是学习分段锁的最好实践

自旋锁

参考自旋锁

总结

  • 自旋锁也是一种思想,一般需要配合CAS使用
  • java.util.concurrent.atomic包下的原子类是自旋锁的很好的实践

锁优化

锁优化分为两种,一种是JVM开发团队对锁的优化,这个对应用开发人员来讲,一般不需要关心。另一种是应用开发人员需要关注的锁优化,这属于开发素养的范畴。

JVM锁优化

参考Java高效并发之锁优化

总结

  • 锁粗化
  • 锁消除

应用开发锁优化

参考高并发Java(9):锁的优化和注意事项

总结

  • 锁优化是JVM实现的对锁的一种加速,算是JVM开发人员给应用开发人员提供的福利
  • 大部分情况下,应用开发人员不需要关心锁优化。

其他概念

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容