主要内容:1.AQS 子类,2.ReentrantLock 简介,3.获取锁,4.释放锁1.AQS 子类 Semphore: 共享锁案例 ReentrantLock: 排他锁案例 ReentrantReadWriteLock: 共享锁和排它锁案例 ThreadPoolExecutor CountDownLatch: 共享锁案例 2.ReentrantLock 简介 ReentrantLock 为可重入锁。 2.1 Sync 和Semaphore相似,ReentrantLock也是通过
主要内容:文章目录,1.AQS 内部体系架构,2.获取资源,3.释放资源,4.其他获取资源1.AQS 内部体系架构 FairSync: 公平锁 NoFairSync: 非公平锁 Shared: 共享模式 Exclusive: 排他模式 2.获取资源 尝试获取共享资源, 返回值为整数, 负数为失败, 0为成功, 但是其他线程无法再成功, 正数为成功, 其他线程也可以成功。 由于共享锁允许多个线程同时获取成功,因此可以用 返回值代表还能有几个线程可以继续获取资源,但并不是强制性的。 2.1
主要内容:1.AQS 内部体系架构,2.获取资源,3.释放资源,4.获取&释放资源总流程,5.其他获取资源的方法1.AQS 内部体系架构 FairSync: 公平锁 NoFairSync: 非公平锁 Shared: 共享模式 Exclusive: 排他模式 2.获取资源 AbstractQueueSynchronized.acquire() 尝试获取资源,成功则结束 获取资源失败,新建节点插入队列 在队列里排队并获取资源 如果等待过程中出现线程中断,则中断自身 (1) 首先就是一次资源获取的尝试
主要内容:1.简介,2.内部类Node,3.AbstractQueuedSynchronizer,4.AQS 内部体系架构,5.AQS 子类1.简介 抽象队列同步器,是一系列同步实现的模板类,如锁Lock,信号量Semaphore,倒排计数器CoundDownLatch等都是基于AQS实现的,同时还提供了Condition对象,其await和sign、signAll对象可以用于代替Object的wait和notofy、notifyAll方法。 CLH队列是是一种先进先出FIFO的双向队列,AQS
主要内容:state状态,自定义资源共享方式,源码实现AQS是AbstractQueuedSynchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,如下图所示。AQS为一系列同步器依赖于一个单独的原子变量(state)的同步器提供了一个非常有用的基础。子类们必须定义改变state变量的protected方法,这些方法定义了state是如何被获取或释放的。鉴于此,本类中的其他方法执行所有的排队和阻塞机制。子类
主要内容:1.什么是AQS,2.AQS的核心思想是什么?它是怎么实现的?,3.AQS原理,4.谈谈对AQS的理解1.什么是AQS AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,比如ReentrantLock,CountDownLatch, Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是
主要内容:1 Condition概述,1.1 Object监视器与Condition,1.2 常用API方和使用示例,2 条件队列的结构,3 等待机制原理,3.1 await()响应中断等待,3.2 await(time TimeUnit)超时等待一段时间,3.3 awaitUntil(deadline)超时等待时间点,3.4 awaitNanos(nanosTimeout) 超时等待纳秒,3.5 awaitUninterruptibly()不响应中断等待,,,,,,,,详细介绍了AQS中的条件
主要内容:1 acquireShared共享式获取锁,1.1 tryAcquireShared尝试获取共享锁,1.2 doAcquireShared自旋获取共享锁,2 reaseShared共享式释放锁,3 acquireSharedInterruptibly共享式可中断获取锁,3.1 doAcquireSharedInterruptibly共享式可中断获取锁,4 tryAcquireSharedNanos共享式超时获取锁,,,,,,详细介绍了AQS中的同步状态的共享式获取、释放的原理,以及独占
主要内容:1 同步队列的结构,2 锁的获取与释放,3 acquire独占式获取锁,3.1 tryAcquire尝试获取独占锁,3.2 addWaiter加入到同步队列,3.3 acquireQueued结点自旋获取锁,3.4 selfInterrupt自我中断,4 release独占式锁释放,4.1 unparkSuccessor唤醒后继结点,5 acquirelnterruptibly独占式可中断获取锁,,,,,,,,,详细介绍了AQS中的同步队列以及同步状态的独占式获取、释放的原理。 1 同
主要内容:1 Lock接口,1.1 Lock接口概述,1.2 Lock接口的API方法,3.3 锁获取与中断,3.4 Synchronized和Lock的区别,2 不可重入独占锁简单实现上文详细介绍了AQS的设计思想,以及总体设计结构。下面我们来介绍一下另一个和锁与AQS相关的接口,Lock接口,然后借用AQS和Lock接口快速实现一个自定义锁。 1 Lock接口 1.1 Lock接口概述 public interface Lock Lock接口本来和AQS没有太多关系的,但是如果想要是实现一个
主要内容:1 从AQS学起,2 AQS的设计,2.1 固定方法,2.2 可重写的方法,2.3 模版方法,3 总体结构总结详细介绍了AQS的设计思想,以及总体设计结构。 1 从AQS学起 public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements Serializable AbstractQueuedSynchronizer,来自于JDK1.5,位于JUC包,由并发编
Aqsis 是一个跨平台的3D渲染引擎。其功能包括阴影,真正的位移,三维深度的场,运动模糊,NURBS曲面,细分曲面,CSG,程序插件,等等。
看Java AQS源码的时候看到cancelAcquire方法中有这么一句: 想问一下为什么这样做就有助于gc。 自己想了很多点感觉都不对。比如如果是为了回收,但是AQS中回收canceled node也不是在这个方法中删除的,其他方法比如acquireQueued就删除了所有canceled node。