ReentrantLock.nofairTryAcquire
1. 获取当前线程,判断当前的锁的状态
2. 如果state=0表示当前是无锁状态,通过cas更新state状态的值
3. 当前线程是属于重入,则增加重入次数
final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread();//获取当前执行的线程 int c = getState();//获得state的值if (c == 0) {//表示无锁状态 if (compareAndSetState(0, acquires)) {//cas替换state的值,cas成功表示获取锁成功 setExclusiveOwnerThread(current);//保存当前获得锁的线程,下次再来的时候不要再尝试竞争锁return true; } } else if (current == getExclusiveOwnerThread()) {//如果同一个线程来获得锁,直接增加重入次数 int nextc = c + acquires; if (nextc < 0) // overflow throw new Error("Maximum lock count exceeded"); setState(nextc); return true; } return false;
}
ReentrantLock.nofairTryAcquire相关推荐
- Java并发之ReentrantLock锁
简介 一种可重入的互斥锁,经由Java5引入,支持一个线程对资源的重复加锁.它和synchronized语句和方法访问的隐式监视器锁,有相同的基本行为和语义,但是功能更强大.之所以存在synchron ...
- 腾讯面试题 你了解ReentrantLock吗?
腾讯面试题 你了解ReentrantLock吗? ReetrantLock是一个可重入的独占锁,主要有两个特性,一个是支持公平锁和非公平锁,一个是可重入. ReetrantLock实现依赖于AQS(A ...
- ReentrantLock+线程池+同步+线程锁
1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...
- ReentrantLock与synchronized
1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的 ...
- ReentrantLock实现原理分析
ReentrantLock主要利用CAS+CLH队列来实现.它支持公平锁和非公平锁,两者的实现类似. CAS:Compare and Swap,比较并交换.CAS有3个操作数:内存值V.预期值A.要修 ...
- JUC AQS ReentrantLock源码分析
Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还 ...
- 通俗易懂的ReentrantLock,不懂你来砍我
前言 自己开的坑,跪着也要填完,欢迎来到Java并发编程系列第五篇ReentrantLock,文章风格依然是图文并茂,通俗易懂,本文带读者们深入理解ReentrantLock设计思想. 认识下Reen ...
- 这篇 ReentrantLock 看不懂,加我我给你发红包
来自:Java建设者 回答一个问题 在开始本篇文章的内容讲述前,先来回答我一个问题,为什么 JDK 提供一个 synchronized 关键字之后还要提供一个 Lock 锁,这不是多此一举吗?难道 J ...
- 从ReentrantLock的实现看AQS的原理及应用
来自:美团技术团队 AQS作为JUC中构建锁或者其他同步组件的基础框架,应用范围十分广泛,这篇文章会带着大家从可重入锁一点点揭开AQS的神秘面纱. 前言 Java中的大部分同步类(Lock.Semap ...
最新文章
- LeetCode简单题之图片平滑器
- Scrapy 模拟登陆知乎--抓取热点话题
- Cookie与Web Storage的区别
- spring beans源码解读之--BeanFactory的注册
- 缓存 Cache-Control:max-age symfony
- OpenCV学习笔记之扫描图像
- HDL输入设计详解攻略
- Android-语言设置流程分析
- gitlab 如何关闭force push
- Visual Studio 2005 编译的版本无法启动,出现应用程序配置不正确的错误
- 第十届数据技术嘉年华活动彩蛋!
- GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题
- react router 4
- 计算机技术和信息技术结合,浅谈通信技术与计算机技术融合发展
- 非中文正则表达式 php,php判断是不是为中文正则表达式大全(转)
- 项目组合、项目集、项目管理实践经验及思考
- 如何快速设计《数字电路》的JK触发器、T触发器描述的驱动方程对应的次态K图——异或卡诺图法
- 外卖行业现状分析_简要分析外卖运营行业的发展现状
- 谁能给我一个FeedDemon v1.1的序列号或者注册文件
- Android平台根据分辨率计算屏幕尺寸
热门文章
- 乙肝疫苗该怎么打(转)
- 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头
- 设计模式---接口隔离模式之门面模式(Façade)
- BZOJ 2179 [快速傅里叶变换 高精度乘法]
- lhgselect 联动选择下拉菜单 v1.0.0 (2011-06-13)
- 【CLRS】《算法导论》读书笔记(一):堆排序(Heapsort)
- linux 根目录突然增大
- 关于远程终端不能登录问题解决!
- 第三方提权之serv-u提权
- mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释