avatar

多线程Ⅱ----锁介绍

概述

从多个角度描述java锁的概念和种类

锁的描述

首先java范围内描述所谓锁种类实际上有些是某些实现同步功能的方法,或者同步锁的属性,如自锁锁,并不是锁而是一种非阻塞式同步方法,sync锁在不同状态下分为偏向锁,轻量锁,重量锁,但是这只是不同的同步手段而已.

同步机制分类

从同步的机制来说实际上就一下两种

  1. CAS加自旋:非阻塞自旋锁
  2. park|unpark:阻塞式锁

java不同api涉及的同步机制

  1. 原子类:CAS自旋
  2. AQS:UNSAFE.PARK
  3. SYNC重量锁:ObjectMonitor
  4. SYNC轻量锁:CAS自旋

从是否挂起线程分为悲观和乐观锁

  1. CAS自旋就是乐观锁
  2. 线程阻塞同步方式就是悲观锁

是否重入

  1. 重入锁:sync重量锁,ReentrantLock
  2. 不可重入锁:NonReentrantLock

获取锁(资源)是否公平

  1. 公平锁
  2. 不公平锁

线程能否共享

  1. 共享锁: LatchDown
  2. 非共享锁: 大多数

synchronized关键字原理

对象头

四种sync锁的转换流程

流程参考
参考2

重量锁源码实现

重量锁源码参考

文章作者: fancylight
文章链接: https://www.fancylight.top/2021/01/14/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E2%85%A1----%E9%94%81%E4%BB%8B%E7%BB%8D/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论