java lock的原理,Java中Lock原理探究
在对于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原理探究相关推荐
- java 递归原理_Java中递归原理实例分析
本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...
- 一文带你理解Java中Lock的实现原理
转载自 一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...
- java lock unlock_【Java并发007】原理层面:ReentrantLock中lock()、unlock()全解析
一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQ ...
- java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...
一.前言 上篇的文章中我们介绍了AQS源码中lock方法和unlock方法,这两个方法主要是用来解决并发中互斥的问题,这篇文章我们主要介绍AQS中用来解决线程同步问题的await方法.signal方法 ...
- java基础--java中HashMap原理
java中HashMap原理 内推军P21 P22 1.为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表 ...
- java中Lock锁的应用简介
java中Lock锁的应用简介 整体描述 方法介绍 1. void lock() 2. boolean tryLock() 3. boolean tryLock(long timeout, TimeU ...
- java 中lock,java中lock获取锁的四种方法
在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
1.使用Lock和Condition的意义 JDK1.5中提供了多线程升级的解决方案. 1.将同步synchronized替换成现实Lock操作. 2.将Object中的wait,notify,not ...
- redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
redis高并发原理 显然,编写URL缩短服务是新的"世界,您好! "在物联网/微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务-整洁的Scala,以Spray ...
最新文章
- maven中snapshot版本和正式版本的区别
- 使窗体拥有透明效果的API
- SpringBoot + AOP 统一处理日志
- 【英语学习】【加州教材】【G4】【科学】Science目录及术语表
- 406. 根据身高重建队列
- asp.net后台正则表达式验证手机号码邮箱
- c# 链接mongDB集群实战开发3
- 放假前的最后一篇文章
- 关于小程序setdata一些使用方法
- sspanel 常用审计规则
- 7 展讯Sprd设置-电池-关联自启动-跟踪代码
- Java计算时间差、日期差总结
- SAP CDS UI 常用注解用法
- 9类人事管理场景应用,泛微协助HR释放更多工作量
- 记一次php、sql注入学习后的一道ctf代码审计题复盘
- pyppeteer报错:NoneType‘ object has no attribute ‘goto‘
- Cocos2D游戏初步
- 著名作曲家范吉利斯因新冠去世,曾写下震撼人心的作品
- 谈谈IT行业的收入和一些生存之道
- 新华字典 - Windows Store
热门文章
- Windows配置远程访问的Jupyter Notebook服务器
- Bert需要理解的一些内容
- Biopython-Chapter3.生物序列对象
- 一种PacBio测序数据组装得到的基因组序列的纠错方法技术 (专利技术)
- HTML里面设置文本倒影,文字倒影怎么做
- html5 canvas 加载图片
- flask 刷新 html 网页
- 二值网络--TBN: Convolutional Neural Network with Ternary Inputs and Binary Weights
- 在Ubuntu16.04上安装CUDA
- Apache的管理及优化web