使用LockSupport.park挂起当前线程编程WATING状态

Thread.interrupted,返回当前线程是否被其他线程触发过中断请求,也就是thread.interrupt(); 如果有触发过中断请求,那么这个方法会返回当前的中断标识true,并且对中断标识进行复位标识已经响应过了中断请求。如果返回true,意味着在acquire方法中会执行selfInterrupt()。

private final boolean parkAndCheckInterrupt() { LockSupport.park(this); return Thread.interrupted();
}

selfInterrupt: 标识如果当前线程在acquireQueued中被中断过,则需要产生一个中断请求,原因是线程在调用acquireQueued方法的时候是不会响应中断请求的

static void selfInterrupt() { Thread.currentThread().interrupt();
}

图解分析

通过acquireQueued方法来竞争锁,如果ThreadA还在执行中没有释放锁的话,意味着ThreadB和ThreadC只能挂起了。

parkAndCheckInterrupt相关推荐

  1. 转:AbstractQueuedSynchronizer的介绍和原理分析

    引自:http://ifeve.com/introduce-abstractqueuedsynchronizer/ 简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同 ...

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

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

  3. 用“逐步排除”的方法定位Java服务线上“系统性”故障

    说明:原文地址已经不可访问,其他地方有转载,不过很多丢失图片,所以,找到一处有图的重新配好图. 用"逐步排除"的方法定位Java服务线上"系统性"故障 Post ...

  4. ReentrantLock实现原理分析

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

  5. 分布式环境下,互斥性与幂等性问题,分析与解决思路

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问.海量数据处理的场景也越来越多.如何用较低成本实 ...

  6. 突然就懵了!面试官问我:线程池中多余的线程是如何回收的?

    点击关注公众号,Java干货及时送达 最近阅读了JDK线程池ThreadPoolExecutor的源码,对线程池执行任务的流程有了大体了解,实际上这个流程也十分通俗易懂,就不再赘述了,别人写的比我好多 ...

  7. 一文搞懂 CountDownLatch 用法和源码!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! CountDownLatch 是多线程控制的一种工具,它被 ...

  8. 分布式系统互斥性与幂等性问题的分析与解决

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:zdy0_2004 blog.csdn.net/zdy0_2 ...

  9. JUC AQS ReentrantLock源码分析

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

最新文章

  1. 字符串string类的使用:回文
  2. 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些...
  3. linux课堂笔记(3)
  4. 计算机课程学习小结,计算机课程学习心得5篇___.docx
  5. 具有多个Join和选定列的示例LINQ
  6. oracle的sga怎么设置,oracle sga设置
  7. POJ2155 Matrix 二维线段树
  8. ​让AI触类旁通93种语言:Facebook最新多语种句嵌入来了
  9. Perl 简单读写XML 文件
  10. 一步到位,用SQL检索ElasticSearch
  11. iOS开发之企业级账号的使用注意的坑
  12. python工作流界面_python 版工作流设计
  13. css背景和边框标签总结
  14. 谷歌浏览器插件离线安装
  15. VBA字典对象操作技巧
  16. 【历史上的今天】1 月 19 日:苹果推出 Lisa;RIM 发布第一款黑莓手机;计算机先驱诞生日
  17. php euc-cn,php配置中文解说
  18. ecshop修改模板可输出php代码,修改ecshop模板体会
  19. vue 环信im 接收语音
  20. Android小红书发帖api接口,小红书Android客户端演进之路

热门文章

  1. HR--上载信息类型的长文本的样例代码
  2. 简化Redis数据访问代码RedisTemplate
  3. 浅谈python socket编程
  4. 什么是REST?以及RESTful的实现(转)
  5. protobuf生成as文件
  6. Android项目开发实战—自定义左右菜单
  7. 强化学习算法Policy Gradient
  8. Python开发【第七篇】: 面向对象和模块补充
  9. 【特征选择】基础知识
  10. 创建故障转移群集,LiveMigration系列之六