通过AtomicBoolean 和队列实现一个线程FIFO的Lock工具,
一步步接近AQS!!!
package com.horizon.thread.aqs; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.LockSupport; public class FIFOMutex { private final AtomicBoolean locked = new AtomicBoolean(false); /** * 线程先进先出队列 */ private final Queue<Thread> waiters = new ConcurrentLinkedQueue<Thread>(); public void lock() { boolean wasInterrupted = false; Thread current = Thread.currentThread(); //把当前线程加入队列 waiters.add(current); // Block while not first in queue or cannot acquire lock //如果当前线程不是第一个:不是第一个肯定,肯定有其他线程在持有资源(保证公平性) //即使是第一个:加锁失败,即使是第一个线程,如果上一个线程没有释放锁 ,那么也应该进入等待 while (waiters.peek() != current || !locked.compareAndSet(false, true)) { LockSupport.park(this); if (Thread.interrupted()) // ignore interrupts while waiting wasInterrupted = true; } //可以把第一个线程移除了,因为已经占用了资源 waiters.remove(); if (wasInterrupted) // reassert interrupt status on exit current.interrupt(); } public void unlock() { //释放锁,其他的线程 此时也不能占用资源 locked.set(false); //此时线程才可以真正执行 LockSupport.unpark(waiters.peek()); } }
相关推荐
aqs-并发编程笔记.pdf
aqs-并发编程(2)笔记.pdf
20.9.24aqs-并发编程笔记.pdf
AQS_3抽象队列同步器
深入分析AQS原理-王雷-v1.pptx
java大师doug lean 在JDK1.5版本的AQS论文中文翻译。 许可:本作品的全部或部分在不为牟利或商业利益为目的的,且在第一页引述本声明及全完整引用的前提下,以数码或硬拷贝形式供个人或课堂使用的复制或分发不收取...
使用Spring Data MongoDB示例进行Spring Boot 该项目描述了带有Spring Data MongoDB和REST示例的Spring Boot示例。
原子操作 四种原子更新方式文档,分别是原子更新基本类型,原子更 新数组,原子更新引用和原子更新字段。Atomic包里的类基本都是使用Unsafe实现的包装 类
Java-AQS同步器 源码解读-条件队列Condition前文为什么需要条件队列Conditon Queue举个小例子分析怎么使用条件队列写个小DemoJDK中是怎么使用的Lock和ConditionLockConditionSync-Queue和Conditian-QueueAQS ...
aqs同步器&redisson锁
在线程获取锁时会调用AQS的acquire()方法,该方法第一次尝试获取锁如果失败,会将该线程加入到CLH队列中:public final void acqui
AQS 原理 lock 最 常 用 的 类 就 是 ReentrantLock , 其 底 层 实 现 使 用 的 是 AbstractQueuedSynchronizer(AQS) 简单来说 AQS 会把所有的请求线程构成一个 CLH 队列,当一个线程执行完毕 (lock.unlock())...
java锁AQS基础逻辑
原文链接: http://www.tianxiaohui.com/index.php/SRE/诊断-Java-由-Synchronizer-和-AQS-混合组成的死锁.html 死锁问题在 SRE 的日常的应用诊断中, 经常遇到. 遇到的大多数, 都是通过 thread dump 里面明显看到的,...
Java并发之AQS详解.pdf
从JUC中的AQS引入,讲解Java volatile与AQS锁内存可见性
最新AQS资料整理,里面知识涉及到AQS所遇到的所有问题,还有视频可以观看,可以帮助大家解惑,可以轻松应对职场问题
AQS流程图ReentranLock.vsdx
juc 的aqs介绍。
java锁底层实现,AQS源码分析。我在公司内部分享写的,如果想进一步了解,可以私聊