acquire是AQS中的方法,如果CAS操作未能成功,说明state已经不为0,此时继续acquire(1)操作

大家思考一下,acquire方法中的1的参数是用来做什么呢?

这个方法的主要逻辑是

1. 通过tryAcquire尝试获取独占锁,如果成功返回true,失败返回false

2. 如果tryAcquire失败,则会通过addWaiter方法将当前线程封装成Node添加到AQS队列尾部

3. acquireQueued,将Node作为参数,通过自旋去尝试获取锁。

public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt();
} 

AQS.accquire相关推荐

  1. 聊聊高并发(二十三)解析java.util.concurrent各个组件(五) 深入理解AQS(三)

    这篇对AQS做一个总结. 上一篇帖了很多AQS的代码,可以看出AQS的实现思路很简单,就是提供了获取acquire和释放操作release,提供了 1. 可中断和不可中断的版本 2. 可定时和不可定时 ...

  2. 死磕java concurrent包系列(六)基于AQS解析信号量Semaphore

    Semaphore 之前分析AQS的时候,内部有两种模式,独占模式和共享模式,前面的ReentrantLock都是使用独占模式,而Semaphore同样作为一个基于AQS实现的并发组件,它是基于共享模 ...

  3. Java并发编程之AbstractQueuedSynchronizer(AQS)源码解析

    自己一个人随便看看源码学习的心得,分享一下啦,不过我觉得还是建议去买本Java并发编程的书来看会比较好点,毕竟个人的理解有限嘛. 独占锁和共享锁 首先先引入这两个锁的概念: 独占锁即同一时刻只有一个线 ...

  4. java aqs源码_Java-AQS源码详解(细节很多!)

    ReentrantLock调用lock()时时序图: addWaiter方法: enq方法:自旋 它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用 ...

  5. java8 同步队列_秋招之路8:JAVA锁体系和AQS抽象队列同步器

    整个的体系图 悲观锁,乐观锁 是一个广义概念:体现的是看待线程同步的不同角度. 悲观锁 认为在自己使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不被别的线程修改. 实现:关 ...

  6. Java中的锁原理、锁优化、CAS、AQS详解

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:景小财 www.jianshu.com/p/e674ee68 ...

  7. JUC AQS ReentrantLock源码分析

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

  8. java多线程aqs实现工具类_Java并发多线程 - 并发工具类JUC

    (adsbygoogle = window.adsbygoogle || []).push({}); 安全共享对象策略 1.线程限制 : 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改 ...

  9. Java并发同步器AQS

    AQS是AbstractQueuedSynchronizer的简写,中文名应该叫抽象队列同步器(我给的名字,哈哈),出生于Java 1.5. 一.什么是同步器 多线程并发的执行,之间通过某种 共享 状 ...

最新文章

  1. C++实现大数的四则运算
  2. 手机安全卫士——进程管理
  3. 神经网络模拟条件反射
  4. 拿下“[warn] (OS 64)指定的网络名不再可用”错误
  5. Spring AOP源码解析——AOP动态代理原理和实现方式
  6. 第七章 scikit-learn与机器学习实战
  7. hive - 可优化的 10 个地方及详解
  8. git 简单使用 基本操作
  9. UVALive6929 Sums【数学】
  10. scrollIntoView()窗口滚动
  11. python报告水印怎么弄_超简单Python安全批量打水印教程!
  12. 2、Ubuntu下安装Vivado下的下载器驱动 Digilent 版本
  13. 下载百度翻译英文读音
  14. 算法4-中兴捧月杯热身赛1素数判断-热身赛2亲和串-热身赛3旅游路线-
  15. 成功解决RuntimeError: cuda runtime error (30)
  16. 找到一个不错的学习python的网站
  17. 图像分辨率+像素+尺寸+文件内存大小
  18. Ubuntu 20.04 安装微信详细教程
  19. 防止FPGA设计中综合后的信号被优化
  20. 最简单的FFMPEG的视频编码器

热门文章

  1. 【转载 译自MarketWatch 】 华尔街疯人日记 (二十五)
  2. IBatisNet1.5学习--配置篇
  3. linux磁盘管理与分区 转载
  4. javascript模拟鼠标双击事件
  5. Lua === Lua 十分钟基础入门上手
  6. 利用 IHttpHandler 自定义 HTTP 处理程序
  7. Windows下的.NET+ Memcached安装
  8. Page,你是怎样处理回发事件的?
  9. 使用vbs脚本检查网站是否使用asp.net
  10. 黑客还是间谍?让你惊出一身冷汗的10个社会工程学黑客攻击手段