# Java 线程锁:ReentrantLock
在多线程编程中,线程同步是确保资源安全和数据一致性的关键技术。Java 提供了多种同步机制,其中之一便是 `ReentrantLock`。它是一个可重入锁,允许同一个线程多次获得锁。本文将深入探讨 `ReentrantLock` 的特性、使用方式和注意事项,并通过代码示例演示其用法。
## 什么是 ReentrantLock?
`Reentr            
                
         
            
            
            
            分享Java锁机制实现原理,细节涉及volatile修饰符、CAS原子操作、park阻塞线程与unpark唤醒、双向链表、锁的公平性与非公平性、独占锁和共享锁、线程等待await、线程中断interrupt。Java ReentrantLock锁机制源码篇一、看下面的场景外卖某商家上线了一个【10元一只鸡】拉新活动,外卖APP定时推送活动日营业额。假如模拟1000个用户同时进行10元购,统计商家日            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-09 13:02:39
                            
                                86阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            阅读目录简述简单实例中断响应(lockInterruptibly)锁申请等待限时(tryLock)公平锁结合源码再看“重入”小结参考资料简述ReentrantLock 是一个可重入的互斥(/独占)锁,又称为“独占锁”。ReentrantLock通过自定义队列同步器(AQS-AbstractQueuedSychronized,是实现锁的关键)来实现锁的获取与释放。其可以完全替代 synchroniz            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2017-04-13 09:49:39
                            
                                576阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            packageconcurrent;importjava.util.concurrent.*;importjava.util.concurrent.locks.ReentrantLock;/***@Auther:zhl*@Date:2019/7/13*@Description:并发测试,重入锁ReentrantLock解决并发问题*/publicclassConcurrentSample{//并发            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2019-08-01 13:59:48
                            
                                749阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、公平锁1、为什么有公平锁  CPU在调度线程的时候是在等待队列里随机挑选一个线程,由于这种随机性所以是无法保证线程先到先得的(synchronized控制的锁就是这种非公平锁)。但这样就会产生饥饿现象,即有些线程(优先级较低的线程)可能永远也无法获取cpu的执行权,优先级高的线程会不断的强制它的资源。那么如何解决饥饿问题呢,这就需要公平锁了。  产生饥饿的另一个原因是:某个线程占据资源不释放,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2017-06-22 10:57:15
                            
                                850阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            学而不思则罔,思而不学则殆 【Java】深入理解ReentrantLock可重入锁之简单使用ReentrantLock简介ReentrantLock方法总结Condition方法总结ReentrantLock简单使用常用方法测试测试tryLock测试tryLock(long timeout, TimeUnit unit)测试lockInterruptibly测试Condition测试Conditi            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-09 16:44:36
                            
                                70阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            (1) ReentrantLock的条件对象通常,线程进入临界区,却发现在某一条件满足之后才能执行,条件对象就是用来管理那些已经获得了锁,但是却不能做有用工作的线程。一个锁对象可以有一个或多个相关的条件对象,我们可用lock.newCondition()方法获得一个条件对象。[java] view plain copy 
 ReentrantLock myLock = new ReentrantL            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-14 22:39:44
                            
                                43阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            线程同步并发: 
  同一个对象被多个线程同时操作多个线程访问同一个对象,并且某些线程还想修改这个对象,这个时候就需要线程同步。线程同步是一种等待机制,多个需要同时访问此对象的线程进入对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用线程同步形成条件:队列+锁(锁机制,synchronized)解决安全性问题缺点: 
  一个线程持有锁会导致其他需要此锁的线程挂起在多线程竞争下,加锁,释            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-09 23:56:02
                            
                                66阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Reentrantlock : 加锁方式有三种 Reentrantlock lock = new Reentrantlock (); 1、lock.lock(); 可重入,不可以打断 ,lock.lock()和lock.unlock()必须成出现 2、lock.lockInterruptibly() ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-11-03 13:15:00
                            
                                152阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            
            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-13 14:17:44
                            
                                186阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # Java ReentrantLock 获取锁的实现方法
## 一、流程图
```mermaid
erDiagram
    ReentrantLock -->|获取锁| lock()
    ReentrantLock -->|释放锁| unlock()
```
## 二、步骤及代码示例
### 1. 创建 ReentrantLock 对象
首先,我们需要创建一个 Reentrant            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-04-18 06:29:51
                            
                                24阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、Lock 锁1、为什么使用 Locksynchronized 线程等待时间过长,获取锁的线程由于要等待IO或者其他原因(比如调用sleep方法)被阻塞了,但是又没有释放锁,其他线程便只能干巴巴地等待,这将极大的影响程序执行效率。synchronized 操作场景,如果多个线程都只是进行读操作,所以当一个线程在进行读操作时,其他线程只能等待无法进行读操作。2、注意事项也就是说 Lock 提供了比            
                
         
            
            
            
            简介通常在多线程环境下,为了确保安全,常常使用synchronized来保证原子性,但是也有一些缺点,所以在JDK1.5中新增加了ReentrantLock类,他和synchronized有相同的基本行为,但ReentrantLock更强大,完全可以代替synchronized。示例public class Main implements Runnable {    private static            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-02-27 21:48:49
                            
                                286阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、前言    本文要介绍使用Java5中 Lock 对象,同样也能实现同步的效果,而且在使用上更加方便、灵活,主要包括 ReentrantLock 类的使用和ReentrantReadWriteLock 类的使用。二、使用ReentrantLock 类1、在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增加的Reentra            
                
         
            
            
            
            本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLock示例在后面的两章,会分别介绍ReentrantLock的两个子类(公平锁和非公平锁)的实现原理。 ReentrantLock介绍ReentrantLock是一个可重入的互斥            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2016-11-14 22:07:00
                            
                                113阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            首先我们先来看一个抢票的例子。假如现在有10张票,3个人在抢,用程序模拟如下:public class Main {    public static void main(String[] args) {        TicketOffice ticketOffice = new TicketOffice();        new Thread            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-29 14:02:54
                            
                                4009阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             
java.util.concurrent 在并发编程中使用的工具类,其重点有lock锁、辅助工具类、Atomic原子类以及并发集合框架等。
lock 最 常 用 的 类 就 是 ReentrantLock , 其 底 层 实 现 使 用 的 是AbstractQueuedSynchronizer(AQS)
Java是如何实现原子操作?在Java中可以通过锁和循环CAS的方式来实现原子操作如:            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-05 17:16:23
                            
                                206阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            JAVA与内核系列之一ReentrantLock锁的实现原理写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁)。其中synchronized锁是JAVA语言层面提供的能力,在此不展开,本文主要讨论JUC里的ReentrantLock锁。一 JDK层1 AbstractQueuedSynchronizerReentra            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-05 14:13:11
                            
                                54阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            独占锁ReentrantLock基本概念ReentrantLock函数列表ReentrantLockgetHoldCountgetOwnergetQueuedThreadsgetQueueLengthgetWaitingThreadsgetWaitQueueLengthhasQueuedThreadhasQueuedThreadshasWaitersisFairisHeldByCurrentThr            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-01-23 16:48:13
                            
                                114阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            独占锁ReentrantLock基本概念ReentrantLock函数列表ReentrantLockgetHoldCountgetOwnergetQueuedThreadsgetQueueLengthgetWaitingThreadsgetWaitQueueLengthhasQueuedThreadhasQueuedThreadshasWaitersisFairisHeldByCurrentThreadisLockedlocklockInterruptiblynewConditiontryLockunloc            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-05-18 14:15:58
                            
                                344阅读