zoukankan      html  css  js  c++  java
  • 阳哥讲面试题(五)各种锁,LockSupport,AQS

    可重入锁(又名递归锁)

    概述

    image

    可重入锁种类

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

    image
    image

    Synchronized可重入的实现原理

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

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

    image

    LockSupport

    是什么

    image
    image
    image
    image

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

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

    image

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

    image
    可能会发生两种异常
    image
    image
    image

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

    image
    产生的问题同上

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

    image

    LockSupport类中的park等待和unpark唤醒

    image

    image
    底层原理
    image
    image
    代码
    image
    如果先unpark再park也不会阻塞,解决了上述两种出现的问题
    image
    解释
    image

    重点
    image
    image

    相关的面试题
    image

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

    源码所在

    image
    image

    image

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

    image

    image

    image

    image

    image
    理解锁和同步器的关系

    • 锁,面向锁的使用者
      image
    • 同步器,面向锁的实现者
      image

    image

    image
    image

    AQS初步

    官网解释

    image

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

    image
    image

    AQS内部体系架构

    image
    image

    image

    node类
    image
    image
    image
    image

    image

    从ReentrantLock开始解读AQS

    image
    image
    image
    image
    image
    image
    image

    ReentrantLock加锁过程

    概述

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

    详解

    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image
    image

    参考模拟图
    这是A在占用
    image
    A执行完,B获得执行权
    image

  • 相关阅读:
    10、xsl中import用法
    09、xsl中输出对应的列和值
    08、xsl中操作子节点带循环输出
    07、xsl中操作子节点
    06、xsl中choose进行多条件选择
    05、xsl中IF的用法
    04、xsl中对字段进行排序
    03、xsl中添加筛选条件
    02、xsl的for循环输出
    01、xsl样式表用网页输出
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/15006394.html
Copyright © 2011-2022 走看看