ReentrantLock源码的一点总结
ReentrantLock 是可重入锁,可重入锁的意思就是同一个线程可以重复获得该锁。
如何做到可重复获得该锁?计数器实现。

第一次加锁,cas比较是不是0,是0设置为1,并设置当前拥有锁的线程;
第二次及后续枷锁,调用acquire方法。

在计数器不是0的情况下,就会比较当前线程是不是同一个线程,如果是同一个线程那么就将技术器+1。
这样就完成了一个重入锁了,重点在于判断是否是同一个线程,同一个线程才能重入。
ReentrantLock源码的一点总结的更多相关文章
- java多线程---ReentrantLock源码分析
ReentrantLock源码分析 基础知识复习 synchronized和lock的区别 synchronized是非公平锁,无法保证线程按照申请锁的顺序获得锁,而Lock锁提供了可选参数,可以配置 ...
- JUC AQS ReentrantLock源码分析
警告⚠️:本文耗时很长,先做好心理准备,建议PC端浏览器浏览效果更佳. Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6 ...
- ReentrantLock源码探究1:非公平锁的获取和释放
1.AQS简单介绍 Sync是ReentrantLock的一个内部类,它继承了AbstractQueuedSynchronizer,即AQS,在CountDownLatch.FutureTask. ...
- Java并发系列[5]----ReentrantLock源码分析
在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可 ...
- Java并发编程笔记之ReentrantLock源码分析
ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞后放入该锁的AQS阻塞队列里面. 首先我们先看一下ReentrantLock的类图结构,如下图所示 ...
- Java并发编程-ReentrantLock源码分析
一.前言 在分析了 AbstractQueuedSynchronier 源码后,接着分析ReentrantLock源码,其实在 AbstractQueuedSynchronizer 的分析中,已经提到 ...
- 第六章 ReentrantLock源码解析2--释放锁unlock()
最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...
- ReentrantLock源码分析--jdk1.8
JDK1.8 ArrayList源码分析--jdk1.8LinkedList源码分析--jdk1.8HashMap源码分析--jdk1.8AQS源码分析--jdk1.8ReentrantLock源码分 ...
- 死磕 java同步系列之ReentrantLock源码解析(二)——条件锁
问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()的时候唤醒的吗? 简介 条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等 ...
随机推荐
- Binding控件某个属性
<Grid Margin="60"> <Grid.RowDefinitions> <RowDefinition Height="*" ...
- Entity States
Added. The entity does not yet exist in the database. The SaveChanges method must issue an INSERT st ...
- EF 导航属性的使用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- JS 密码弱中强显示
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" conten ...
- 数据绑定(五)使用集合对象作为列表控件的ItemsSource
原文:数据绑定(五)使用集合对象作为列表控件的ItemsSource ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值,ItemsSource里存放的是一条一条 ...
- 枚举与字符串转及RecordSet转XML,JSON
function AdoToJs(ado: TADOQuery): string; var I, J: Integer; json: string; begin json := '{columns:[ ...
- Image Captioning代码复现
Image caption generation: https://github.com/eladhoffer/captionGen Simple encoder-decoder image capt ...
- 【Gerrit】Add a Member
add user email:XXXX@163.com username:XXXX( songfei) Add Step: System Server:1. ssh 服务器用户 ...
- 拆分Codeigniter 数据库,独立提取
起因: codeigniter的activeRecord链式操作非常的方便,目前手头的项目用的不是CI,但是又想使用CI的数据库操作. 1. 新建文件夹 activeDB,内部目录如下 最 ...
- 微信小程序把玩(十八)picker组件
原文:微信小程序把玩(十八)picker组件 picker选择器分为三种,普通选择器,时间选择器, 日期选择器 用mode属性区分,默认是普通选择器.测试时时间和日期点击无反应不知道是BUG还是啥!没 ...