Java中Lock原理探究

本教程操作环境:windows7系统、java10版,DELL G3电脑。

1.ReentrantLock的调用过程

/**
*Createsaninstanceof{@codeReentrantLock}.
*Thisisequivalenttousing{@codeReentrantLock(false)}.
*/
publicReentrantLock(){
sync=newNonfairSync();
}

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

staticabstractclassSyncextendsAbstractQueuedSynchronizer

Sync又有两个子类:

finalstaticclassNonfairSyncextendsSync

finalstaticclassFairSyncextendsSync

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

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

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

在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚。这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示。

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容