• 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、

  • 相关阅读:
    Mermaid | 强大的画图渲染脚本
    Tools | windows剪切板增强版
    Eclipse | eclipse食用教程
    WebSites | 常用工具网站
    Extensions | Extension && Plugins
    Java | IDE-Eclipse下载安装
    敲个采药玩玩
    今日sb题之 sdnuoj 1064
    stl概述
    给定 n 个字符串,求有多少字符串是其他字符串的前缀。
  • 原文地址:https://www.cnblogs.com/igoodful/p/9547562.html
Copyright © 2020-2023  润新知