概述
从多个角度描述java锁的概念和种类
¶锁的描述
首先java范围内描述所谓锁种类
实际上有些是某些实现同步功能的方法,或者同步锁的属性,如自锁锁
,并不是锁而是一种非阻塞式同步方法,sync锁
在不同状态下分为偏向锁
,轻量锁
,重量锁
,但是这只是不同的同步手段而已.
¶同步机制分类
从同步的机制来说实际上就一下两种
- CAS加自旋:
非阻塞自旋锁
- park|unpark:
阻塞式锁
¶java不同api涉及的同步机制
- 原子类:
CAS自旋
- AQS:
UNSAFE.PARK
- SYNC重量锁:
ObjectMonitor
- SYNC轻量锁:
CAS自旋
¶从是否挂起线程分为悲观和乐观锁
- CAS自旋就是乐观锁
- 线程阻塞同步方式就是悲观锁
¶是否重入
- 重入锁:sync重量锁,ReentrantLock
- 不可重入锁:NonReentrantLock
¶获取锁(资源)是否公平
- 公平锁
- 不公平锁
¶线程能否共享
- 共享锁: LatchDown
- 非共享锁: 大多数

¶synchronized关键字原理
¶对象头
¶四种sync锁的转换流程
¶重量锁源码实现
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客!
评论