0
点赞
收藏
分享

微信扫一扫

并发编程——AbstractQueuedSynchronizer原理


摘要

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

一、可重入锁(递归锁)

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

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

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

  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原理_重入锁_02

 

并发编程——AbstractQueuedSynchronizer原理_System_03

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

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

二、LockSupport的原理

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

并发编程——AbstractQueuedSynchronizer原理_System_06

 

并发编程——AbstractQueuedSynchronizer原理_System_07

 

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

 

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

 

并发编程——AbstractQueuedSynchronizer原理_System_10

 

并发编程——AbstractQueuedSynchronizer原理_System_11

 

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

 

并发编程——AbstractQueuedSynchronizer原理_System_13

 

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

并发编程——AbstractQueuedSynchronizer原理_java_15

并发编程——AbstractQueuedSynchronizer原理_java_16

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

 

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

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

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

 

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

 

并发编程——AbstractQueuedSynchronizer原理_java_22

 

并发编程——AbstractQueuedSynchronizer原理_System_23

 

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

 

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

三、AQS原理

AQS抽象的队列同步器,

并发编程——AbstractQueuedSynchronizer原理_System_26

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

 

并发编程——AbstractQueuedSynchronizer原理_java_28

 

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

 

并发编程——AbstractQueuedSynchronizer原理_java_30

 

并发编程——AbstractQueuedSynchronizer原理_System_31

 

并发编程——AbstractQueuedSynchronizer原理_System_32

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

 

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

并发编程——AbstractQueuedSynchronizer原理_java_35

 

并发编程——AbstractQueuedSynchronizer原理_System_36

 

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

 

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

 

并发编程——AbstractQueuedSynchronizer原理_System_39

并发编程——AbstractQueuedSynchronizer原理_java_40

并发编程——AbstractQueuedSynchronizer原理_System_41

 

并发编程——AbstractQueuedSynchronizer原理_java_42

并发编程——AbstractQueuedSynchronizer原理_java_43

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

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

 

并发编程——AbstractQueuedSynchronizer原理_java_46

四、AQS源码分析

并发编程——AbstractQueuedSynchronizer原理_java_47

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

 

并发编程——AbstractQueuedSynchronizer原理_System_49

并发编程——AbstractQueuedSynchronizer原理_java_50

并发编程——AbstractQueuedSynchronizer原理_System_51

 

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

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

 

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

 

并发编程——AbstractQueuedSynchronizer原理_System_55

 

并发编程——AbstractQueuedSynchronizer原理_java_56

 

并发编程——AbstractQueuedSynchronizer原理_System_57

 

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

 

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

 

并发编程——AbstractQueuedSynchronizer原理_System_60

 

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

 

并发编程——AbstractQueuedSynchronizer原理_java_62

 

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

 

并发编程——AbstractQueuedSynchronizer原理_System_64

 

并发编程——AbstractQueuedSynchronizer原理_java_65

并发编程——AbstractQueuedSynchronizer原理_System_66

博文参考

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

举报

相关推荐

0 条评论