文章目录

  • Lock
  • Condition
  • ReentrantLock
  • ReentrantReadWriteLock

Lock

虽然在Java中可以通过synchroinzed关键字来加锁限定线程间的互斥,保持线程同步实现线程安全。除了synchroinzed之外,JDK5之后还提供了更高级的锁,Lock。

相关API:

Lock.getHoldCount():查询当前线程保持这个锁的个数,也就是调用lock()的线程个数。
Lock.getQueueLength():查询当前处于就绪状态,正在等待获取此锁的线程个数。
Lock.getWaitQueueLength(condition):查询指定个condition中,处于WAITING状态的线程个数。
Lock.hasQueuedThread(thread):查询指定线程是否正在等待获取此锁。
Lock.hasQueuedThreads():查询是否有线程正在等待获取此锁。
Lock.hasWaiters(condition):查询指定线程是否正在等待与此锁相关的condition条件。
isFair():判断当前锁是否是公平锁。
isHeldByCurrentThread():查询当前线程是否保留此锁。
isLocked():查询此锁定是否由任意线程持有。

Lock作用及其使用相关推荐

  1. 【锁】Latch、lock、 pin的区别

    [锁]Latch.lock. pin的区别  我之前写过的几篇锁的文章: [锁]Oracle锁系列:http://blog.itpub.net/26736162/viewspace-2128896/ ...

  2. Lock与Synchronized区别

    先说结论,后面详解 synchronized是关键字,Lock是接口; synchronized是隐式的加锁,lock是显式的加锁; synchronized可以作用于方法上,lock只能作用于方法块 ...

  3. java双重检查锁单例真的线程安全吗?

     相信大多数同学在面试当中都遇到过手写单例模式的题目,那么如何写一个完美的单例是面试者需要深究的问题,因为一个严谨的单例模式说不定就直接决定了面试结果,今天我们就要来讲讲看似线程安全的双重检查锁单例模 ...

  4. MySql各种锁机制的学习

    加锁的目的: 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.锁 ...

  5. 多线程之Java内存模型(JMM)(一)

    在未正确使用锁的时候,多线程的程序可能变的很容易出错,并且难以排查.而JMM则给我们一种规范,它描述了多线程程序如何与内存交互. 与文无关 JMM大致描述: JMM描述了线程如何与内存进行交互.Jav ...

  6. Cocoapods的Podfile使用

    Cocoapods的Podfile使用 对于第三方库集成,现在最受欢迎的就是基于Ruby语言实现的Cocoapods,可以很方便的管理引入库,当然你也可以使用Swift Package Manager ...

  7. Java 内存模型 与 高效并发

    2019独角兽企业重金招聘Python工程师标准>>> 1. 并发解决了什么问题 多任务处理. 在处理器(CPU)运算速度 与 存储设备 (内存).通讯设备 的速度差距极大的前提下, ...

  8. ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked

    ES出现异常: failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not lo ...

  9. 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )

    文章目录 一.原子操作 二.volatile 关键字使用场景 一.原子操作 原子操作 : read : 从 主内存 中的线程共享变量中读取数据 ; load : 将从主内存读取到的数据 , 加载到 线 ...

最新文章

  1. Linux内核源码中使用宏定义的若干技巧
  2. ABAP:区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN
  3. javascript:使用document.getElementById读取数据为空分析
  4. java富文本编辑器wangEditor-3.1.1的使用流程
  5. python写入文件中文乱码_记一次python写入txt文件正常,但是写入csv文件中文乱码问题...
  6. 如何产生cpk图形_PPK与CPK定义,差异分析及计算
  7. 如果每天给你888元,只能看书学习,不能玩手机电脑,你能坚持多少天?
  8. 为什么微盟耗时 7 天 7 夜才找回删库数据?
  9. Linux下的/etc/ssh/ssh_config文件配置详解SSH配置文件相关参数详细说明
  10. smote算法_探索SMOTE算法
  11. android keep class,Android混淆快速配置之@Keep
  12. android media player实现一个可手势滑动控制 + 可以调节分辨率|字幕|倍速的视频播放器(MediaPlayer + ExoPlayer实现)
  13. 本地安全策略gpedit.msc详解
  14. GYM 2015 ACM Syrian Collegiate Programming Contest
  15. 兔子拔萝卜的java游戏_幼儿园中班体育游戏教案详案《小兔拔萝卜》
  16. Android开发-基础入门
  17. 快速建设门户网站的网址
  18. tp-link wr 841n 300m 局域网限速的研究
  19. SQL SERVER添加表注释、字段注释
  20. 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化

热门文章

  1. 凸包问题的GRAHAM-SCAN解法(附C++代码)
  2. shell两行输出为一行
  3. HTML和CSS的知识点总结
  4. 解决 vmware 虚拟机安装后没有虚拟网卡问题
  5. 艰难坎坷终到此,从此星光不问赶路人
  6. 如何处理团队的技术债务
  7. 基于WIN32 API界面编程实现的贪吃蛇游戏
  8. jquery短信验证码倒计时
  9. 将两个android项目整合,并在父项目中使用子项目的功能
  10. 亚马逊AVS开发--树莓派3麦克风配置