• 技术文章 >java >java基础

    Java中Lock原理探究

    小妮浅浅小妮浅浅2021-04-07 10:00:31原创4309

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

    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都将处理后面的流程。

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

    以上就是Java中Lock原理探究,相信大家在看完本篇文章后,对lock使用的方法有了更加深刻的理解,学会后可以就一些lock使用进行尝试。

    专题推荐:java lock原理
    上一篇:java中lock有哪几种用法 下一篇:java中lock接口是什么

    相关文章推荐

    • java中lock的同步• java中lock有哪几种用法• java一维数组赋值的两种方法

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网