一、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. 图->定义

     文字描述 顶点 指图中的数据元素 弧尾 若<v,w>属于两个顶点之间的关系的集合,表示从v到w的一条弧,则v为弧尾或初始点 弧头 若<v,w>属于两个顶点之间的关系的集合,表 ...

  2. Badboy测试工具官网下载以及安装导出Jmeter脚本

    首先打开浏览器,在百度上搜索“Badboy ”,默认搜索到的第一个就是官网地址: 1 也可以在其他软件下载网址上进行下载 2 点击进入后,官网左侧菜单中有“download”字样,或者官网右侧顶部也有 ...

  3. Java之旅_高级教程_网络编程

    摘自:http://www.runoob.com/java/java-networking.html JAVA网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. j ...

  4. falsk 与 django 钩子方法

    falsk 四大钩子方法# 在第一次请求之前调用@app.before_first_requestdef before_first_request(): print("这是第一次请求之前调用 ...

  5. 内核态与用户态通信 之 sockopt

    转自:http://blog.csdn.net/jk110333/article/details/8642261   用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单. ...

  6. STLの应用

    QAQ因为绝望地发现好像这些应用都没有题目...所以就专门开了个随笔存题面qwq 谁的孙子最多 给定一棵树,其中1号节点是根节点,问哪一个节点的孙子节点最多,有多少个.(孙子节点,就是儿子节点的儿子节 ...

  7. 【python基础】os.path模块常用方法详解

    os.path模块 主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法. 更多的方法可以去查看官方文档:http://docs.python.org/library/os.path. ...

  8. VSCode代码修改后跑起来没反应,打开本地文件,代码没变化

    两种解决办法: 首先:修改VSCode默认配置文件,点击左下角设置标志图 -> 设置,出来了设置相关的东西,搜索 files.autoSave 第一种:把"files.autoSave ...

  9. SpringMVC(三):参数绑定、输入输出转换

    一.参数解析绑定 1. 自定义绑定:不绑定某些项 @InitBinder private void initBinder(WebDataBinder dataBinder) { dataBinder. ...

  10. 【数据库】SQL语句解析

    学习网站: http://www.runoob.com/sql/sql-having.html 1. 1.现在我们想要查找总访问量大于 200 的网站. 回取出多条重复的网址的SQL语句: selec ...