锁分析 Lock

锁分析
Lock
	NonReentrantLock
	ReadLock	共享锁
	ReentrantLock 重入锁	排他锁
		sync.lock	返回值为void,表示如无异常发生都认为锁获取成功
			FairSync.lock	公平锁
				FairSync.tryAcquire
				获取线程
				获取线程重入次数
				重入次数为0
					是 也就是第一次获取锁
						在队列头部(队列为空或者当前线程在队列头部)
							获取锁 设置锁状态 重入次数
							设置锁的独占线程
							获取锁成功
					否
						当前线程是否是锁的独占线程
							是
								重入次数+1 成功获取锁
							否
								获取锁失败
			NonfairSync.lock	非公平锁
				NonfairSync.lock
				按照假设当前线程是第一次获取锁来申请锁
					成功
						设置当前线程为锁的独占线程
					失败
						按照重入的方式获取锁
	WriteLock	排他锁

	

CAS 存在ABA的问题
ReentrantLock 重入锁默认构造是非公平锁实现,当申请锁的线程刚好碰到正在执行的线程释放了锁,那么他就有机会直接获取到锁,而不用排队。

重入锁的公平锁实现原理:
如果当前线程第一次获取锁,如果当前线程在抽象队列同步执行器的队首位置,利用CAS原理修改线程重入次数为1,成功则修改锁的独占线程为当前线程。
如果当前线程不是第一次获取锁,那么判断当前锁的独占线程与当前获取锁的线程是否一致,如果一致那么获取锁成功。

重入锁的非公平锁实现原理:
尝试按照第一次获取锁的方式直接获取锁,成功则获取锁成功
失败则重入的方式获取锁(判断当前线程与锁的独占锁是否一致)

  

转载于:https://www.cnblogs.com/yun965861480/p/11011226.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值