• ReentrantLock源码(二)


    一、ReentrantLock类中的方法解读。

    1、lock方法。实现了接口Lock中的lock方法。这里实际上是调用了sync成员变量的lock方法来实现。所以取决于sync的实现。

    2、unlock方法。实现了接口Lock中的unlock方法。这里实际上是调用了sync成员变量的release方法来实现。所以取决于sync的实现。

    3、lockInterruptibly方法。实现了接口Lock中的unlock方法。这里实际上是调用了sync成员变量的acquireInterruptibly方法来实现。所以取决于sync的实现。

    4、trylock方法。实现了接口Lock中的trylock方法。这里实际上是调用了sync成员变量的anonfairTryAcquire方法来实现。所以取决于sync的实现。

    5、trylock重载的方法。实现了接口Lock中的trylock重载方法。这里实际上是调用了sync成员变量的tryAcquireNanos方法来实现。所以取决于sync的实现。

    6、newCondition方法。实现了接口Lock中的newCondition方法。这里实际上是调用了sync成员变量的newCondition方法来实现。所以取决于sync的实现。

    7、getHoldCount方法。这里实际上是调用了sync成员变量的getHoldCount方法来实现。所以取决于sync的实现。

    8、isHeldByCurrentThread方法。这里实际上是调用了sync成员变量的isHeldByCurrentThread方法来实现。所以取决于sync的实现。

    9、isLocked方法。这里实际上是调用了sync成员变量的isLocked方法来实现。所以取决于sync的实现。

    10、isFair方法。判断该ReentrantLock对象中sync成员是不是内部类FairSync的实例。

    11、hasQueuedThreads方法。这里实际上是调用了sync成员变量的hasQueuedThreads方法来实现。所以取决于sync的实现。

    12、hasQueuedThread方法。这里实际上是调用了sync成员变量的hasQueuedThread方法来实现。所以取决于sync的实现。

    13、hasWaiters方法。这里实际上是调用了sync成员变量的hasWaiters方法来实现。所以取决于sync的实现。

    14、getOwner方法。这里实际上是调用了sync成员变量的getOwner方法来实现。所以取决于sync的实现。

    15、getQueuedThreads方法。这里实际上是调用了sync成员变量的getQueuedThreads方法来实现。所以取决于sync的实现。

    16、getWaitingThreads方法。这里实际上是调用了sync成员变量的getWaitingThreads方法来实现。所以取决于sync的实现。

    17、getQueueLength方法。这里实际上是调用了sync成员变量的getQueueLength方法来实现。所以取决于sync的实现。

    18、getWaitQueueLength方法。这里实际上是调用了sync成员变量的getWaitQueueLength方法来实现。所以取决于sync的实现。

    19、toString方法。这里实际上是调用了sync成员变量的getOwner方法来实现。所以取决于sync的实现。打印出线程名称/null。

    #################################################################################

       由于ReentrantLock类的成员变量sync是抽象类,因此里面的方法取决于运行时动态指定的,这里,他有两个实现类,一个是FairSync类,一个是NonFairSync类。仔细一看,两个类里面都只有两个成员方法。显然,这两个方法在两个类中实现是不同的,不然干嘛分两个类呢。而ReentrantLock类中大部分方法都是调用sync,因此大部分方法应该在Sync类和Sync的继承AbstractQueuedSynchronizer中。

    ###############################################################################

    二、NonFairSync类中的方法。

    0、方法目录。

    1、lock方法。实现了Sync类中的方法。

    2、tryAcquire方法。实现了父类Sync的父类AQS的方法。实际上调用的是Sync类中的nonfairTryAcquires方法。

    4

    三、FairSync类中的方法。

    0、方法目录。

    1、lock方法。

    2、tryAcquire方法。实现了父类Sync的父类AQS的方法。

    3、

    四、Sync类中的方法。

    0、方法目录。

    1、lock方法。抽象方法,交给实现类来实现。

    2、nonfairTryAcquires方法。

    3、tryRelease方法。

    4、isHeldExclusively方法。

    5、newCondition方法。这里直接使用了父类的内部类。

    6、getOwner方法。

    7、getHoldCount方法。

    8、isLocked方法。

    9、readObject方法。

    10、

    五、AbstractQueuedSynchronizer类中的方法。

    -1、成员变量目录。

    0、方法目录。

    1、acquire方法。

    2、getState方法。

    3、setState方法。

    4、compareAndSetState方法。

    5、compareAndSetHead方法。

    6、compareAndSetTail方法。

    7、 compareAndSetWaitStatus方法。

    8、compareAndSetNext方法。

    9、acquireInterruptibly方法。

    10、tryAcquireNanos方法。

    11、addWaiter方法。

    12、acquireQueued方法。

    13、tryAcquire方法。该实现就是抛出异常,因此,如果子类不重写该方法,那么直接调用该方法就会抛出异常。

    14、setInterrupt方法。

    15、doAcquireInterruptibly方法。

    16、enq方法。

    17、setHead方法。

    18、setHeadAndPropagate方法。

    19、tryAcquireNanos方法。

    20、doAcquireNanos方法。

    21、release方法。

    22、tryRelease方法。

    23、unparkSuccessor方法。

    24、acquireShared方法。

    25、tryAcquireShared方法。

    26、doAcquireShared方法。

    27、acquireSharedInterruptibly方法。

    28、doAcquireSharedInterruptibly方法。

    29、tryAcquireShareNanos方法。

    30、doAcquireSharedNanos方法。

    31、releaseShared方法。

    32、 tryReleaseShared方法

    33、doReleaseShared方法。

    34、hasQueuedThreads方法。

    35、hasContended方法。

    36、isQueued方法。

    37、hasQueuedPredecessors方法。

    38、getQueueLength方法。

    39、getQueuedThreads方法。

    40、getExclusiveQueuedThreads方法。

    41、owns方法。

    42、hasWaiters方法。

    43、getWaitQueueLength方法。

    44、getWaitingThreads方法。

    45、isHeldExclusively方法。

    46、apparentlyFirstQueuedIsExclusive方法。

    47、isOnSyncQueue方法。

    48、findNodeFromTail方法。

    49、tansferForSignal方法。

    50、transferAfterCancelledWait方法。

    51、fullRelease方法。

    52、setHead方法。

    53、unparkSuccessor方法。

    54、setHeadAndProgagate方法。

    55、cancelAcquire方法。

    56、

    57、parkAndCheckInterrupt方法。

    58、

    59

    六、

    1、

    2、

    3、

    4、

    5、

  • 相关阅读:
    A Year Of Books
    Spring Boot 之 RESRful API 权限控制
    Git回滚远程版本
    初探设计:Java接口和抽象类何时用?怎么用?
    深入浅出: Java回调机制(异步)
    深入浅出: 大小端模式
    Java IO 之 FileInputStream & FileOutputStream源码分析
    Java IO 之 OutputStream源码
    软件测试--安装软件
    Mybatis 中$与#的区别
  • 原文地址:https://www.cnblogs.com/igoodful/p/9547562.html
Copyright © 2020-2023  润新知