Java 并发编程:ReentrantLock 锁与 AQS

CSDN 2024-08-25 10:35:05 阅读 51

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 030 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。当然,我也会在必要的时候进行相关技术深度的技术解读,相信即使是拥有多年 Java 开发经验的从业者和大佬们也会有所收获并找到乐趣。

在多线程编程中,锁机制是保证线程安全的核心技术之一。Java 提供了多种锁机制,其中 <code>ReentrantLock 是一种灵活且功能丰富的可重入锁,具有公平锁、非公平锁等特性,能够替代传统的 synchronized 关键字来实现更复杂的并发控制。本文将深入探讨 ReentrantLock 的工作原理及其背后的关键组件——AbstractQueuedSynchronizer(AQS)。通过了解 AQS 的设计和实现,读者将掌握如何通过锁机制在高并发环境下确保数据的一致性和线程的安全性。


文章目录

1、Lock 锁

1.1、为什么使用 Lock

1.2、注意事项

1.3、ReentrantLock 和 synchronized

2、ReentrantLock

2.1、加锁、解锁

2.2、公平锁与非公平锁

2.3、如何实现可重入

3、抽象队列同步器 AQS

3.1、抽象队列同步器

3.2、同步状态的处理

3.3、FIFO队列的设计——AQS灵魂

3.3.1、Node 节点的设计

3.3.2、共享资源的竞争

3.3.3、共享资源的释放


1、Lock 锁

1.1、为什么使用 Lock

synchronized 线程等待时间过长,获取锁的线程由于要等待 IO 或者其他原因(比如调用 sleep 方法)被阻塞了,



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。