Java 不可重入锁实现
在多线程编程中,锁是控制对共享资源访问的重要手段。有多种类型的锁,然而,不可重入锁是较为复杂的一种。不可重入锁的特点是同一线程在获得锁后,如果再次请求该锁,会导致死锁。因此,在某些情况下,需要深入理解不可重入锁的特性与实现,才能有效利用它们。
> "不可重入锁(Non-Reentrant Lock)是指同一线程对同一资源进行加锁时,如果已经持有该锁,则无法再次加锁,可            
                
         
            
            
            
            # Java实现不可重入锁
## 1. 概述
不可重入锁是一种特殊的锁,它不允许同一个线程多次获得同一把锁。在Java中,我们可以通过一些技巧来实现不可重入锁。本文将介绍如何使用Java语言实现不可重入锁,并提供详细的代码示例。
## 2. 流程
下面是实现不可重入锁的整体流程:
```mermaid
gantt
    title 不可重入锁实现流程
    section 初始化            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-11-09 09:34:24
                            
                                53阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java重入锁与不可重入锁的理解与解决方案
在软件开发中,尤其是多线程编程,锁是一个至关重要的概念。Java中的重入锁和不可重入锁是最常用的锁机制之一。简单来说,重入锁允许同一线程重复获取锁,而不可重入锁不允许同一线程再次获取它。明白这些概念不仅能帮助我在复杂的多线程环境中去实现业务逻辑,同时也为我们更高效地解决潜在的死锁问题打下基础。
> 引用块:  
> “在我们电商平台的交易处理过程中,            
                
         
            
            
            
            锁:把需要的代码块,资源或数据锁上,只允许一个线程去操作,保证了并发时共享数据的一致性。锁有两种类型:可重入锁和不可重入锁。不可重入锁若当前线程执行中已经获取了锁,如果再次获取该锁时,就会获取不到被阻塞。下面我们以自旋锁设计一个不可重入锁/* 不可重入锁 */public class NRSpinLock implements Ilock{private AtomicReference currL            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-21 08:21:41
                            
                                81阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            前言最近在用Apache的Zookeeper客户端库Curator,Curator实现了一套的分布式锁,有可重入和不可重入,想起其实在单机环境下,Java提供的synchronized 和 ReentrantLock的锁工具,这两个都是可重入锁,所以可重入锁和不可重入锁有什么区别呢,带着这个问题,去网上找答案。主题很多的博客上都是列了怎么实现这两种锁,例如像下面的两段代码:public class            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-07 23:07:12
                            
                                23阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            前言    最近在用Apache的Zookeeper客户端库Curator,Curator实现了一套的分布式锁,有可重入和不可重入,想起其实在单机环境下,Java提供的synchronized 和 ReentrantLock的锁工具,这两个都是可重入锁,所以可重入锁和不可重入锁有什么区别呢,带着这个问题,去网上找答案。   
 主题  &            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-22 15:18:58
                            
                                91阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目录前言1、什么是可重入锁呢?2、自己写代码验证下可重入和不可重入3、自己如何实现一个可重入和不可重入锁呢4、ReentrantLock如何实现可重入的5、可重入锁的特点 前言    面试题:synchronized是可重入锁吗?    答案:synchronized是可重入锁。ReentrantLock也是的。1、            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-08 10:27:40
                            
                                58阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先,我们来看下面一段代码:我们都知道用lock来保证原子性(this.count++这段代码称为临界区)。那么什么是原子性?就是不可分,从头执行到尾,不能被其他线程同时执行。CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。CAS主要通过compareAndSwapXXX()方法来实现,而这            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-12 15:58:03
                            
                                83阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            可重入和不可重入 的基本概念---简介---可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。重入即表示重复进入,首先            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-22 15:46:14
                            
                                31阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # Java 不可重入锁
在并发编程中,锁是一种常用的同步机制,用于保护共享资源的访问。Java提供了synchronized关键字和Lock接口来支持锁的使用。大多数情况下,我们使用的锁都是可重入的,即同一个线程可以多次获得同一个锁。但是,在某些情况下,我们可能需要使用不可重入锁。本文将介绍什么是不可重入锁,以及如何在Java中使用它。
## 什么是不可重入锁?
不可重入锁是一种特殊的锁,            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-22 10:40:50
                            
                                791阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            ## 实现Java不可重入锁的流程
为了实现Java不可重入锁,我们需要按照以下步骤进行操作:
1. 定义一个锁对象:创建一个Object类型的对象,用于作为锁对象。
```java
Object lock = new Object();
```
2. 定义一个标志位:创建一个boolean类型的标志位,用于标记锁的状态,初始值为false。
```java
boolean isLock            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-22 10:03:36
                            
                                58阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1 . 什么是可重入锁锁的概念就不用多解释了,当某个线程A已经持有了一个锁,当线程B尝试进入被这个锁保护的代码段的时候.就会被阻塞.而锁的操作粒度是”线程”,而不是调用(至于为什么要这样,下面解释).同一个线程再次进入同步代码的时候.可以使用自己已经获取到的锁,这就是可重入锁java里面内置锁(synchronize)和Lock(ReentrantLock)都是可重入的2 . 为什么要可重入如果线            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-01 16:21:13
                            
                                108阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             java中常用的可重入锁:synchronized,java.util.concurrent.locks.ReentrantLock  jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但在实现上却有很大差距,且ReentrantLock相比synchroni            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-12 10:23:12
                            
                                109阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、不可重入锁不可重入锁是指当前线程执行中已经获取了锁,如果再次获取该锁时,就会被阻塞。下面我们以wait/notify来设            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-06-27 10:15:46
                            
                                176阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            可重入锁指同一个线程可以再次获得之前已经获得的锁,避免产生死锁。
Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock。1、synchronized 使用方便,编译器来加锁,是非公平锁。2、ReenTrantLock 使用灵活,锁的公平性可以定制。3、相同加锁场景下,推荐使用 synchronized。
ReenTra            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2018-09-25 11:21:00
                            
                                281阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            锁的简单应用 用lock来保证原子性(this.count++这段代码称为临界区) 什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行。 可通过CAS来实现原子操作 CAS(Compare and Swap): CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-08-19 11:01:00
                            
                                245阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            不可重入锁也叫自旋锁 指当一个方法调用了锁之后,如持有本锁的另一个            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-04-03 15:36:38
                            
                                85阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            链接(原文链接):https://blog.csdn.net/u012545728/article/details/80843595最近正在阅读JavaReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的moni            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2020-02-17 11:57:04
                            
                                680阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识 Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步块代码里面            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-03-17 16:19:05
                            
                                129阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一起进步!一起学习!            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-05-07 16:55:57
                            
                                369阅读
                            
                                                                             
                 
                
                                
                    