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相关推荐

  1. Java并发之ReentrantLock锁

    简介 一种可重入的互斥锁,经由Java5引入,支持一个线程对资源的重复加锁.它和synchronized语句和方法访问的隐式监视器锁,有相同的基本行为和语义,但是功能更强大.之所以存在synchron ...

  2. 腾讯面试题 你了解ReentrantLock吗?

    腾讯面试题 你了解ReentrantLock吗? ReetrantLock是一个可重入的独占锁,主要有两个特性,一个是支持公平锁和非公平锁,一个是可重入. ReetrantLock实现依赖于AQS(A ...

  3. ReentrantLock+线程池+同步+线程锁

    1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...

  4. ReentrantLock与synchronized

    1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的 ...

  5. ReentrantLock实现原理分析

    ReentrantLock主要利用CAS+CLH队列来实现.它支持公平锁和非公平锁,两者的实现类似. CAS:Compare and Swap,比较并交换.CAS有3个操作数:内存值V.预期值A.要修 ...

  6. JUC AQS ReentrantLock源码分析

    Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还 ...

  7. 通俗易懂的ReentrantLock,不懂你来砍我

    前言 自己开的坑,跪着也要填完,欢迎来到Java并发编程系列第五篇ReentrantLock,文章风格依然是图文并茂,通俗易懂,本文带读者们深入理解ReentrantLock设计思想. 认识下Reen ...

  8. 这篇 ReentrantLock 看不懂,加我我给你发红包

    来自:Java建设者 回答一个问题 在开始本篇文章的内容讲述前,先来回答我一个问题,为什么 JDK 提供一个 synchronized 关键字之后还要提供一个 Lock 锁,这不是多此一举吗?难道 J ...

  9. 从ReentrantLock的实现看AQS的原理及应用

    来自:美团技术团队 AQS作为JUC中构建锁或者其他同步组件的基础框架,应用范围十分广泛,这篇文章会带着大家从可重入锁一点点揭开AQS的神秘面纱. 前言 Java中的大部分同步类(Lock.Semap ...

最新文章

  1. LeetCode简单题之图片平滑器
  2. Scrapy 模拟登陆知乎--抓取热点话题
  3. Cookie与Web Storage的区别
  4. spring beans源码解读之--BeanFactory的注册
  5. 缓存 Cache-Control:max-age symfony
  6. OpenCV学习笔记之扫描图像
  7. HDL输入设计详解攻略
  8. Android-语言设置流程分析
  9. gitlab 如何关闭force push
  10. Visual Studio 2005 编译的版本无法启动,出现应用程序配置不正确的错误
  11. 第十届数据技术嘉年华活动彩蛋!
  12. GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题
  13. react router 4
  14. 计算机技术和信息技术结合,浅谈通信技术与计算机技术融合发展
  15. 非中文正则表达式 php,php判断是不是为中文正则表达式大全(转)
  16. 项目组合、项目集、项目管理实践经验及思考
  17. 如何快速设计《数字电路》的JK触发器、T触发器描述的驱动方程对应的次态K图——异或卡诺图法
  18. 外卖行业现状分析_简要分析外卖运营行业的发展现状
  19. 谁能给我一个FeedDemon v1.1的序列号或者注册文件
  20. Android平台根据分辨率计算屏幕尺寸

热门文章

  1. 乙肝疫苗该怎么打(转)
  2. 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头
  3. 设计模式---接口隔离模式之门面模式(Façade)
  4. BZOJ 2179 [快速傅里叶变换 高精度乘法]
  5. lhgselect 联动选择下拉菜单 v1.0.0 (2011-06-13)
  6. 【CLRS】《算法导论》读书笔记(一):堆排序(Heapsort)
  7. linux 根目录突然增大
  8. 关于远程终端不能登录问题解决!
  9. 第三方提权之serv-u提权
  10. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释