AQS各种锁获取和释放流程梳理

概述AQS中获取锁和释放锁有两种模式:独占锁独占锁获取的流程:1、获取锁失败(tryAcquire返回false)先加入到阻塞队列中2、循环获取同步状态获取不到就挂起,直到被唤醒抢占头节点并继续执行。独占锁释放的流程:1、释放锁成功(tryRelease返回true)2、判断head节点不为空,并且

并发队列 BlockingQueue

BlockingQueue开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现。首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Queue),为什么说是阻塞(Blocking)的呢?是因为 BlockingQueue 支持当获取队列元素但是队列为空时,会阻

AQS原理总结

概述Java 中的很多同步类,如 ReentrantLock、CountDownLatch 等都是基于 AbstractQueuedSynchronizer(简称为AQS)实现的。AQS 是一种提供原子式管理同步状态、阻塞和唤醒线程功能以及维护队列模型的抽象框架,用来构建锁或者其他同步组件。本篇文章

AQS(AbstractQueuedSynchronizer)源码深度解析(4)—共享式获取锁、释放锁的原理

acquireShared共享式获取锁共享式获取与独占式获取的区别就是同一时刻是否可以多个线程同时获取到锁。在独占锁的实现中会使用一个exclusiveOwnerThread属性,用来记录当前持有锁的线程。当独占锁已经被某个线程持有时,其他线程只能等待它被释放后,才能去争锁,并且同一时刻只有一个线程