1. AQS概念及其组件AQS基础概念及其作用AQS基础概念AQS: 即抽象队列同步器,AbstractQueuedSynchronizerAQS之shared mode: 即共享锁/读锁,用于线程读取加锁,不能进行写操作,可以读读共享AQS之exclusive mode: 即独占锁/排他锁/写锁,用于线程原子写操作时加锁,只能一个线程持有,其他线程处于等待状态AQS中不同m...
原创
2021-12-04 16:18:27
164阅读
这篇文章,基于子路老师的AQS,在这之前我对AQS,对它的源码大部分是似懂非懂的感觉,但是看了子路老师的文章,好像
原创
2022-01-14 10:36:49
62阅读
使用AQS自己实现一把锁 其实是想一把锁需要两点: 1. 锁状态( 0当前有线程在使用 1当前无线程在使用) 2.持有锁的线程(当前线程) 总结:就是当前如果有线程通过竞争cas成功了,则将 【锁状态】设为1,将持有锁的线程记录起来。 这样就能防止其他线程再获取。 我们知道要是实现一个自定义的 Lo
转载
2020-11-23 16:55:00
158阅读
2评论
ReentrantLock锁的实现是基于AQS实现的,所以先简单说下AQS: AQS是AbstractQueuedSynchronizer缩写,顾名思义:抽象的队列同步器,它是JUC里面许多同步工具类实现的核心 其实简单来说AQS有两个核心,一个是volatile修饰的int类型state,这个是记 ...
转载
2021-09-17 14:37:00
119阅读
2评论
锁的概念因为操作系统是分片运行的,当一段公有数据在一个分片段同时被多个线程访问就换涉及到数据安全问题,因为此操作是非原子性的。锁就是用了解决这一数据不安全问题的,它的作业是保证这一时间段的操作是原子性的,从而保证数据的安全。java的synchronizedjava的synchronized是系统提供的一个关键字,可用来修饰方法和代码块,被修饰的代码在多线程的情况下会对该区域代码上锁,保证代码执行
转载
2023-09-19 09:18:24
35阅读
在看canal源码时发现一个有趣的锁实现--BooleanMutex 这个锁在canal里面多处用到,比如系统初始化/授权控制,没权限时阻塞等待,有权限时所有线程都可以快速通过;还有canal客户端在使用集群模式(ClusterCanalConnector)连接服务端中做高可用的时候,它用来控制只有 ...
转载
2021-09-24 11:17:00
43阅读
2评论
昨天不是放假嘛,端午然后广州这边疫情+下雨,二少就找了些AQS的资料看看,没错,就是肝!在广州的小伙伴要保护好自己哈,反正听党的话,不要乱跑就是了,哈哈~AQS中公平锁和非公平锁怎么实现的?如上图所示,公平锁和非公平锁的代码主要有两处地方有区别:公平锁调用lock()方法获取锁时,直接抢占锁【acquire(1),见注释1】, 非公平锁调用lock()方法获取锁时,先执行cas获取锁,获取失败后再
转载
2023-09-04 22:17:53
146阅读
# 使用Java AQS实现非公平锁
在多线程编程中,锁是一种必要的机制,用来保护共享资源,防止数据的不一致性。Java提供了一个非常强大的工具——AbstractQueuedSynchronizer (AQS),它可以帮助我们实现自定义锁。在这篇文章中,我们将学习如何使用AQS实现一个非公平锁。
### 一、非公平锁的概念
非公平锁是一种锁策略,允许线程在获取锁时,不按照请求的顺序来获取。
一、简介AQS全称为AbstractQueuedSynchronizer,它提供了一个FIFO(First in First out 先入先出)队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLock、CountDownLatch等。AQS是一个抽象类,主要是通过继承的方式来使用,它本身没有实现任何的同步接口,仅仅是定义了同步状态的获取以及释放的方法
转载
2023-07-16 10:13:00
119阅读
AQS原理-CountDownLatch基于AQS的state如何实现共享资源
原创
2019-06-19 12:40:50
1339阅读
public class MyLock { static AtomicReference<Thread> atomicReference = new AtomicReference<>(); public static void myLock(){ System.out.println(Thread ...
转载
2021-11-04 11:59:00
119阅读
2评论
最近做的一个小项目中有这样的需求:整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(读>>写)更新问题。既然读写并发操作,那么就涉及到操作互斥,这里自然想到了读写锁,本文对读写锁方面的知识做个梳理。为什么需要读写锁?与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥,读写互斥,写写互斥,而一
转载
2024-10-22 22:30:13
18阅读
package action;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.locks.LockSupport;import sun.misc.Unsafe;public class MyLock { private volatile int state=0; pri...
原创
2020-04-10 14:27:35
53阅读
参考链接:https://www.bilibili.com/video/BV12K411G7Fg 通过 CAS ,我们可以实现乐观锁操作,从而使得线程进行同步,但是通过 CAS 的源码,我们发现 CAS 仅仅能修改内存中的一个值,而不是对对象进行同步,那么该如何对对象进行同步呢?同时,在多线程对统一 ...
转载
2021-10-29 17:24:00
173阅读
2评论
介绍 AQSAQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如各种锁:ReentrantLock、ReadWriteLock、StampedLock各种线程同步工具类:CountDownLatch、CyclicBarrier、Semaphore线程池中的 WorkerLock 接口的实现基本都是通过聚合了一个 AQS 的子类来完成线程
本文主要介绍了
1. AQS 的实现原理:同步阻塞队列
2. Condition 的实现原理:条件等待队列
推荐
原创
2022-09-22 10:08:24
333阅读
深入理解AQS一,AQS1,ReentrantLock2,CAS3,AbstractQueuedSynchronizer3.1,FairSync3.2,NofairSync3.3,AQS中几个重要的相关参数3.4,Node 一,AQSAbstractQueuedSynchronizer,定义了一套多线程访问共享资源的同步器框架,依赖于状态的同步器1,ReentrantLock一种基于AQS框架的
转载
2023-12-06 15:44:32
28阅读
PS:该文章是借鉴掘金的 石衫的架构笔记 谈到公平锁和非公平锁,首先要引入2个概念。一个是CAS,一个是AQS。CAS:全名叫做CompareAndSet,顾名思义就是先比较再往里面塞值。AQS:全名是AbstractQueuedSynchronizer,中文叫抽象队列同步器。他是ReentrantLock中的一个基类。借鉴一下别人的图这两个关键字都是用于java中的并发处理。CAS其实
转载
2023-11-10 20:38:34
59阅读