一、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方法。

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

六、

1、

2、

3、

4、

5、

ReentrantLock源码(二)的更多相关文章

  1. 死磕 java同步系列之ReentrantLock源码解析(二)——条件锁

    问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()的时候唤醒的吗? 简介 条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等 ...

  2. Java并发之ReentrantLock源码解析(二)

    在了解如何加锁时候,我们再来了解如何解锁.可重入互斥锁ReentrantLock的解锁方法unlock()并不区分是公平锁还是非公平锁,Sync类并没有实现release(int arg)方法,这里会 ...

  3. 并发编程(五)——AbstractQueuedSynchronizer 之 ReentrantLock源码分析

    本文将从 ReentrantLock 的公平锁源码出发,分析下 AbstractQueuedSynchronizer 这个类是怎么工作的,希望能给大家提供一些简单的帮助. AQS 结构 先来看看 AQ ...

  4. Java并发编程-ReentrantLock源码分析

    一.前言 在分析了 AbstractQueuedSynchronier 源码后,接着分析ReentrantLock源码,其实在 AbstractQueuedSynchronizer 的分析中,已经提到 ...

  5. JUC AQS ReentrantLock源码分析

    警告⚠️:本文耗时很长,先做好心理准备,建议PC端浏览器浏览效果更佳. Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6 ...

  6. 多线程高并发编程(3) -- ReentrantLock源码分析AQS

    背景: AbstractQueuedSynchronizer(AQS) public abstract class AbstractQueuedSynchronizer extends Abstrac ...

  7. AQS源码二探-JUC系列

    本文已在公众号上发布,感谢关注,期待和你交流. AQS源码二探-JUC系列 共享模式 doAcquireShared 这个方法是共享模式下获取资源失败,执行入队和等待操作,等待的线程在被唤醒后也在这个 ...

  8. Java并发系列[5]----ReentrantLock源码分析

    在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可 ...

  9. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  10. Java并发编程笔记之ReentrantLock源码分析

    ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞后放入该锁的AQS阻塞队列里面. 首先我们先看一下ReentrantLock的类图结构,如下图所示 ...

随机推荐

  1. Page11:状态反馈、输出反馈的概念及性能比较,极点配置的基本概念、意义及其算法[Linear System Theory]

    内容包含离散时间线性时不变系统的稳定判据 状态反馈.输出反馈的基本概念及其性能比较 极点配置的基本概念.意义及其算法

  2. Mac终端的Cocoapods的安装及使用

    阅读目录 第一步,首先要检查Mac是否安装了rvm.打开终端,输入指令 rvm -v 第二步,用rvm安装ruby环境 第三步,检查更新RubyGems(Ruby1.9.1 以后的版本自带RubyGe ...

  3. UTF8 、unicode 和 Ascii2

    1.http://blog.renren.com/share/68464/3096404244

  4. 实验一:Java开发环境的熟悉

    实验一:Java开发环境的熟悉 一.实验一-1 在码云中建立"20165317exp1"的项目. 从git中下载该项目. 在"20165317exp1"目录下建 ...

  5. 《HTTP - http首部信息》

    推荐一首歌 - 僕が死のうと思ったのは (曾经我也想过一了百了) 也就听了几十遍而已 经历一番波折,终于正式到了北京. 刚开始是很艰难的,多走两步就好了,不是么. 1:首部字段 Cache-Contr ...

  6. 哨兵模式下,master选举关键点

    哨兵模式下的选举策略: 1:slave priority越低 ,优先级越高 2:1同等情况下,slave复制的数据越多优先级越高 3:2相同的条件下run id越小越容易被选举

  7. 20165213&20165225结对学习感想及创意照

    20165213&20165225结对学习感想及创意照 会JAVA的大学生活好小组 团队感悟: 1+1>2还是1+1<2? 上述两个观点实际没有对错之分,取决点在于个人见解. 相信 ...

  8. 浏览器数据库 IndexedDB 入门教程

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  9. BZOJ1280 Emmy卖猪pigs 网络流

    正解:网络流 解题报告: 传送门! 我网络流的基础题都还麻油做完就来做这个了,,,wsl,,, 首先想下最基础的构图方法 不难想到把猪圈和顾客分别当做节点,然后新建一个源点和汇点 然后考虑怎么连边,首 ...

  10. vue-router利用url传递参数

    app.vue <template> <div id="app"> <router-link to="/">home< ...