并发编程——AbstractQueuedSynchronizer原理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


摘要

本博文将详细的介绍的AQS的底层原理和源码分析。帮助大家更加全面的学习和了解的AQS的底层源码。

一、可重入锁(递归锁)

可重入锁又名递归锁:是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。

并发编程——AbstractQueuedSynchronizer原理_java

一个线程中的多个流程可以获取同一把锁,持有这把同步锁可以再次进入。自己可以获取自己的内部锁。

  1. 隐式锁(即synchronized关键字使用的锁)默认是可重。
  2. Synchronized的重入锁的实现机理。
  3. 显式锁(即Lock)也有ReentrantLock这样的可重入锁。
package com.zhuangxiaoyan.java.base.javabase.AQS;

/**
 * @Classname ReentrantLockTest
 * @Description TODO
 * @Date 2022/5/23 22:34
 * @Created by xjl
 */
public class ReentrantLockTest {
    static Object objectLockA=new Object();

    public static void m1(){
        new Thread(()->{
            synchronized (objectLockA){
                System.out.println(Thread.currentThread().getName()+"\t"+"-------------外层调用");
                synchronized (objectLockA){
                    System.out.println(Thread.currentThread().getName()+"\t"+"-------------中层调用");
                    synchronized (objectLockA){
                        System.out.println(Thread.currentThread().getName()+"\t"+"-------------内层调用");
                    }
                }
            }
        },"t1").start();
    }

    public static void main(String[] args) {
        m1();
    }
}
package com.zhuangxiaoyan.java.base.javabase.AQS;

/**
 * @Classname ReentrantLockTest2
 * @Description TODO
 * @Date 2022/5/23 22:43
 * @Created by xjl
 */
public class ReentrantLockTest2 {
    public static synchronized void m1(){
        System.out.println("====外");
        m2();
    }

    public static synchronized void m2(){
        System.out.println("====中");
        m3();
    }

    public static synchronized void m3(){
        System.out.println("====内");
    }

    public static void main(String[] args) {
        m1();
    }
}

并发编程——AbstractQueuedSynchronizer原理_java_02

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_03

并发编程——AbstractQueuedSynchronizer原理_重入锁_04

并发编程——AbstractQueuedSynchronizer原理_重入锁_05

二、LockSupport的原理

LockSupport是用于创建锁和其他同步类的基本线程阻塞原语。线程等待唤醒机制。

并发编程——AbstractQueuedSynchronizer原理_重入锁_06

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_07

 

并发编程——AbstractQueuedSynchronizer原理_System_08

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_09

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_10

 

并发编程——AbstractQueuedSynchronizer原理_java_11

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_12

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_13

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_14

并发编程——AbstractQueuedSynchronizer原理_java_15

并发编程——AbstractQueuedSynchronizer原理_java_16

并发编程——AbstractQueuedSynchronizer原理_并发编程_17

 

并发编程——AbstractQueuedSynchronizer原理_java_18

并发编程——AbstractQueuedSynchronizer原理_java_19

并发编程——AbstractQueuedSynchronizer原理_重入锁_20

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_21

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_22

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_23

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_24

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_25

三、AQS原理

AQS抽象的队列同步器,

并发编程——AbstractQueuedSynchronizer原理_重入锁_26

并发编程——AbstractQueuedSynchronizer原理_并发编程_27

 

并发编程——AbstractQueuedSynchronizer原理_java_28

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_29

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_30

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_31

 

并发编程——AbstractQueuedSynchronizer原理_System_32

并发编程——AbstractQueuedSynchronizer原理_java_33

 

并发编程——AbstractQueuedSynchronizer原理_System_34

并发编程——AbstractQueuedSynchronizer原理_java_35

 

并发编程——AbstractQueuedSynchronizer原理_System_36

 

并发编程——AbstractQueuedSynchronizer原理_java_37

 

并发编程——AbstractQueuedSynchronizer原理_System_38

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_39

并发编程——AbstractQueuedSynchronizer原理_重入锁_40

并发编程——AbstractQueuedSynchronizer原理_System_41

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_42

并发编程——AbstractQueuedSynchronizer原理_并发编程_43

并发编程——AbstractQueuedSynchronizer原理_重入锁_44

并发编程——AbstractQueuedSynchronizer原理_并发编程_45

 

并发编程——AbstractQueuedSynchronizer原理_System_46

四、AQS源码分析

并发编程——AbstractQueuedSynchronizer原理_System_47

并发编程——AbstractQueuedSynchronizer原理_java_48

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_49

并发编程——AbstractQueuedSynchronizer原理_重入锁_50

并发编程——AbstractQueuedSynchronizer原理_System_51

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_52

并发编程——AbstractQueuedSynchronizer原理_java_53

 

并发编程——AbstractQueuedSynchronizer原理_System_54

 

并发编程——AbstractQueuedSynchronizer原理_System_55

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_56

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_57

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_58

 

并发编程——AbstractQueuedSynchronizer原理_并发编程_59

 

并发编程——AbstractQueuedSynchronizer原理_java_60

 

并发编程——AbstractQueuedSynchronizer原理_java_61

 

并发编程——AbstractQueuedSynchronizer原理_System_62

 

并发编程——AbstractQueuedSynchronizer原理_java_63

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_64

 

并发编程——AbstractQueuedSynchronizer原理_重入锁_65

并发编程——AbstractQueuedSynchronizer原理_重入锁_66

博文参考

尚硅谷Java大厂面试题全集(java面试,周阳主讲)-Java面试_大厂高频面试题_阳哥_哔哩哔哩_bilibili

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6