您当前的位置: 首页 > 

庄小焱

暂无认证

  • 2浏览

    0关注

    805博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

并发编程——AbstractQueuedSynchronizer原理

庄小焱 发布时间:2021-04-02 12:40:07 ,浏览量:2

摘要

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

一、可重入锁(递归锁)

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

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

  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();
    }
}

 

二、LockSupport的原理

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

 

 

 

 

 

 

 

 

 

 

 

 

 ​​​​​

 

三、AQS原理

AQS抽象的队列同步器,

 

 

 

 

 

 

 

 

 

 

 

 

四、AQS源码分析

 

 

 

 

 

 

 

 

 

 

 

 

 

 

博文参考

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

关注
打赏
1657692713
查看更多评论
立即登录/注册

微信扫码登录

0.0423s