在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚。这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示。下面我们就一起看看Java中Lock原理过程的一些具体操作,内容一起往下看。

1.ReentrantLock的调用过程/**

* Creates an instance of {@code ReentrantLock}.

* This is equivalent to using {@code ReentrantLock(false)}.

*/

public ReentrantLock() {

sync = new NonfairSync();

}

经过观察ReentrantLock把所有Lock接口的操作都委派到一个Sync类上,该类继承了AbstractQueuedSynchronizer:static abstract class Sync extends AbstractQueuedSynchronizer

Sync又有两个子类:final static class NonfairSync extends Sync

final static class FairSync extends Sync

2.Reentrant.lock()调用默认非公平锁

非公平锁:比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式。

通过上面调用过程及AbstractQueuedSynchronizer的注释可以发现,AbstractQueuedSynchronizer中抽象了绝大多数Lock的功能,而只把tryAcquire方法延迟到子类中实现。tryAcquire方法的语义在于用具体子类判断请求线程是否可以获得锁,无论成功与否AbstractQueuedSynchronizer都将处理后面的流程。

以上就是Java中Lock原理探究,相信大家在看完本篇文章后,对lock使用的方法有了更加深刻的理解,学会后可以就一些lock使用进行尝试。

java lock的原理,Java中Lock原理探究相关推荐

  1. java 递归原理_Java中递归原理实例分析

    本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...

  2. 一文带你理解Java中Lock的实现原理

    转载自   一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...

  3. java lock unlock_【Java并发007】原理层面:ReentrantLock中lock()、unlock()全解析

    一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQ ...

  4. java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...

    一.前言 上篇的文章中我们介绍了AQS源码中lock方法和unlock方法,这两个方法主要是用来解决并发中互斥的问题,这篇文章我们主要介绍AQS中用来解决线程同步问题的await方法.signal方法 ...

  5. java基础--java中HashMap原理

    java中HashMap原理 内推军P21 P22 1.为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表 ...

  6. java中Lock锁的应用简介

    java中Lock锁的应用简介 整体描述 方法介绍 1. void lock() 2. boolean tryLock() 3. boolean tryLock(long timeout, TimeU ...

  7. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

  8. Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例

    1.使用Lock和Condition的意义 JDK1.5中提供了多线程升级的解决方案. 1.将同步synchronized替换成现实Lock操作. 2.将Object中的wait,notify,not ...

  9. redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...

    redis高并发原理 显然,编写URL缩短服务是新的"世界,您好! "在物联网/微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务-整洁的Scala,以Spray ...

最新文章

  1. maven中snapshot版本和正式版本的区别
  2. 使窗体拥有透明效果的API
  3. SpringBoot + AOP 统一处理日志
  4. 【英语学习】【加州教材】【G4】【科学】Science目录及术语表
  5. 406. 根据身高重建队列
  6. asp.net后台正则表达式验证手机号码邮箱
  7. c# 链接mongDB集群实战开发3
  8. 放假前的最后一篇文章
  9. 关于小程序setdata一些使用方法
  10. sspanel 常用审计规则
  11. 7 展讯Sprd设置-电池-关联自启动-跟踪代码
  12. Java计算时间差、日期差总结
  13. SAP CDS UI 常用注解用法
  14. 9类人事管理场景应用,泛微协助HR释放更多工作量
  15. 记一次php、sql注入学习后的一道ctf代码审计题复盘
  16. pyppeteer报错:NoneType‘ object has no attribute ‘goto‘
  17. Cocos2D游戏初步
  18. 著名作曲家范吉利斯因新冠去世,曾写下震撼人心的作品
  19. 谈谈IT行业的收入和一些生存之道
  20. 新华字典 - Windows Store

热门文章

  1. Windows配置远程访问的Jupyter Notebook服务器
  2. Bert需要理解的一些内容
  3. Biopython-Chapter3.生物序列对象
  4. 一种PacBio测序数据组装得到的基因组序列的纠错方法技术 (专利技术)
  5. HTML里面设置文本倒影,文字倒影怎么做
  6. html5 canvas 加载图片
  7. flask 刷新 html 网页
  8. 二值网络--TBN: Convolutional Neural Network with Ternary Inputs and Binary Weights
  9. 在Ubuntu16.04上安装CUDA
  10. Apache的管理及优化web