0
点赞
收藏
分享

微信扫一扫

阳哥讲面试题(五)各种锁,LockSupport,AQS

可重入锁(又名递归锁)

概述

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入

可重入锁种类

隐式锁(即synchronized使用的锁)默认是可重入锁

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_02

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_03

Synchronized可重入的实现原理

多啥会多出来一个,是为了防止发生异常也可以退出锁

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_04

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_05

显式锁(即Lock)也有ReentrantLock这样的可重入锁

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_06

LockSupport

是什么

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_07

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_08

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_09

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_10

线程等待唤醒机制(wait/notify)的改良加强版

3种让线程等待和唤醒的方法

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_11

Object类中的wait和notify实现线程等待和唤醒

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_12

可能会发生两种异常

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_13

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_14

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_15

Condition接口中的await和signal实现线程等待和唤醒

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_16

产生的问题同上

传统的Synchronized和Lock实现等待唤醒通知的约束

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_17

LockSupport类中的park等待和unpark唤醒

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_18

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_19

底层原理

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_20

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_21

代码

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_22

如果先unpark再park也不会阻塞,解决了上述两种出现的问题

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_23

解释

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_24

重点

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_25

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_26

相关的面试题

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_27

AbstractQueuedSynchronizer(抽象的队列同步器)之AQS

源码所在

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_28

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_29

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_30

AQS为什么是JUC中最重要的基石

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_31

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_32

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_33

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_34

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_35

理解锁和同步器的关系

  • 锁,面向锁的使用者
    阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_36
  • 同步器,面向锁的实现者
    阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_37

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_38

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_39

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_40

AQS初步

官网解释

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_41

有阻塞就需要排队,实现排队必然需要队列

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_42

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_43

AQS内部体系架构

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_44

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_45

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_46

node类

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_47

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_48

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_49

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_50

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_51

从ReentrantLock开始解读AQS

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_52

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_53

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_54

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_55

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_56

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_57

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_58

ReentrantLock加锁过程

概述

  • 尝试枷锁
  • 加锁失败,线程进入队列
  • 线程入队列后,进入阻塞状态

详解

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_59

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_60

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_61

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_62

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_63

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_64

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_65

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_66

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_67

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_68

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_69

阳哥讲面试题(五)各种锁,LockSupport,AQS_重入锁_70

参考模拟图

这是A在占用

阳哥讲面试题(五)各种锁,LockSupport,AQS_加锁_71

A执行完,B获得执行权

阳哥讲面试题(五)各种锁,LockSupport,AQS_可重入_72




举报

相关推荐

0 条评论