技术文章 > java >  java基础 > 正文

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的同步
  JavaScript中value与val有什么区别?
  java中lock有哪几种用法
  java一维数组赋值的两种方法
相关视频章节
  什么是tkinter窗口
  例子3 登录窗口
  例子2 登录窗口
  例子1 登录窗口
  pack grid place 放置位置
作者信息

小妮浅浅

认证0级讲师

最近文章
python在协程中增加任务 436
python pyg2plot的原理 341
python中pyg2plot如何使用? 152
推荐视频
视频教程分类