欢迎访问欧博亚洲(Allbet Game)!

首页科技正文

ug环球电脑版下载:系统梳理一下锁

admin2020-06-043

靠山

有人对Java主流锁做了下面周全的梳理。梳理的确实挺好的。然则我看到这张图,第一个感受是:记不住。

  

由于分了太多类,彼此之间没有什么联系。做PPT可以。若是谈天或者面试,不用纸笔的情况下,就不太好形貌了。也不利于对原理和应用的明白。

基于上述的思量,我就自己系统的梳理一下锁,希望可以有助于人人明白和影象,以至于最后在工作中获得很好的应用。

先说线程锁再说分布式锁。

 

线程锁

概述 

这里说的线程锁是Java线程锁,从原理上各个语言应该都对照相似。有许多维度的划分方式,我对照建议的是从大面上分为乐观锁和消极锁。

乐观锁主要是自旋+CAS的方式,好比JCU(java.util.concurrent包)的原子类。 

消极锁主要用synchronized关键字的隐式锁和基于AQS的显示锁。

上面三段总结如下:

 

 

消极锁的实现原理

1>synchronized关键字

随着java版本升级,synchronized关键字虽然是用C++写的,然则原理和JCU包的ReentrantLock很相似。synchronized关键字有4种锁状态:无锁、偏向锁、轻量级锁、重量级锁。无锁类似于ReentrantLock的交替执行,没有并发,就不涉及锁;偏向锁类似于ReentrantLock的可重入的观点,使得已经获取到锁的线程可以多次获取锁;轻量级锁解决的问题是只管制止线程切换,使用的方式也和ReentrantLock相似,是自旋+CAS的方式;重量级锁依赖于管程monitor来实现,和ReentrantLock一样都涉及用户态和内核态切换。

凭据这个我们再来弥补一下Java线程锁的头脑导图:

ug环球电脑版下载:系统梳理一下锁 第1张

 

2>基于基于AQS的显示锁

基于AQS的显示锁我之前看过一些源码。这内里对照经典的是ReentrantLock。这是可重入锁,就是同一个线程可以频频进入加锁的线程。若是想实现不能重入锁也很简朴。把可重入锁对当前线程做特殊处置的部门去掉就好了。

其他JCU下locks包里的锁好比读写锁就是将锁细化成了读锁和写锁。读锁是共享锁的实现,写锁是排他锁的实现。

ReentrantLock可以使用公正锁和非公正锁两种方式,公正锁和非公正锁各自继续了AQS。区别只是非公正锁在需要加锁时先直接实验是否可以获取锁乐成,而公正锁是先看自己是否需要排队。

下面以ReentrantLock的公正锁为例来简朴聊一下AQS的源码。AQS焦点是实现了CLH行列。

AQS有head、tail、持有锁的线程、状态4个主要的成员变量。

行使head!=tail就是说AQS是否未被初始化来判断是否交替执行,交替执行则不用加锁;若是需要加锁则判断是否就是当前拥有锁的线程,是的话,将进入次数+1;若是不是则判断是否需要初始化AQS,需要的话先初始化一个dummy header,再将自己加入队尾,若是是行列里dummy header的指针指向的节点,则它为先自旋判断是否可以获取锁;若是不是dummy header指针指向的节点,则使用park让出cpu。当dummy header的指针指向的节点获取到锁之后,会将head指向自己,同时将自己这个Node节点的当前线程设置为空,将自己设置为dummy header,同时将原来dummy header的指针都设置为null,使得原dummy header成为一个没有引用的节点,便于垃圾接纳。

凭据这个我们再来弥补一下Java线程锁的头脑导图:

ug环球电脑版下载:系统梳理一下锁 第2张

 

分布式锁

不管是线程锁照样分布式锁,都实现了tryLock、lock、unlock三个方式。

tryLock的语义是非壅闭锁,实验获取锁,乐成返回true,不乐成返回false;主流lock语义是壅闭锁。实现一样平常基于tryLock来做自旋,不乐成的时刻也会有像ReentrantLock一样的壅闭操作。

常见的分布式锁实现以及数据库锁的实现详见之前写的文章:《MySQL常见6个考题在现实工作中的运用》这里就不再赘述了。

 

总结

本篇文章在先容知识点是次要的,主要是展示了总结思索的思绪,希望能对读者朋友们的思索问题方式上有所辅助,仅做参考。

,

Allbet Gaming

www.baolonglxg.com欢迎进入欧博平台网站(Allbet Gaming),Allbet Gaming开放欧博平台网址、欧博注册、欧博APP下载、欧博客户端下载、欧博真人游戏(百家乐)等业务。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源:欧博亚洲(Allbet Game)!

本文链接:http://www.czshenhaifb.com/post/1200.html

网友评论