一、ReentrantLock类中的方法解读。

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

ReentrantLock源码(二)_内部类

 

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

ReentrantLock源码(二)_成员变量_02

 

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

ReentrantLock源码(二)_成员变量_03

 

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

ReentrantLock源码(二)_内部类_04

 

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

ReentrantLock源码(二)_成员变量_05

 

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

ReentrantLock源码(二)_父类_06

 

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

ReentrantLock源码(二)_父类_07

 

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

ReentrantLock源码(二)_成员变量_08

 

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

ReentrantLock源码(二)_内部类_09

 

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

ReentrantLock源码(二)_内部类_10

 

 

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

ReentrantLock源码(二)_内部类_11

 

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

ReentrantLock源码(二)_内部类_12

 

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

ReentrantLock源码(二)_成员变量_13

 

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

ReentrantLock源码(二)_内部类_14

 

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

ReentrantLock源码(二)_成员变量_15

 

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

ReentrantLock源码(二)_父类_16

 

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

ReentrantLock源码(二)_父类_17

 

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

ReentrantLock源码(二)_成员变量_18

 

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

ReentrantLock源码(二)_成员变量_19

 

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

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

 

ReentrantLock源码(二)_内部类_20

 

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

二、NonFairSync类中的方法。

0、方法目录。

ReentrantLock源码(二)_成员变量_21

 

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

ReentrantLock源码(二)_内部类_22

 

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

ReentrantLock源码(二)_成员变量_23

 

4

三、FairSync类中的方法。

0、方法目录。

ReentrantLock源码(二)_内部类_24

 

1、lock方法。

ReentrantLock源码(二)_内部类_25

 

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

ReentrantLock源码(二)_父类_26

 

3、

四、Sync类中的方法。

0、方法目录。

ReentrantLock源码(二)_内部类_27

 

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

ReentrantLock源码(二)_成员变量_28

 

2、nonfairTryAcquires方法。

ReentrantLock源码(二)_父类_29

 

3、tryRelease方法。

ReentrantLock源码(二)_成员变量_30

 

4、isHeldExclusively方法。

ReentrantLock源码(二)_内部类_31

 

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

ReentrantLock源码(二)_内部类_32

 

6、getOwner方法。

ReentrantLock源码(二)_内部类_33

 

7、getHoldCount方法。

ReentrantLock源码(二)_成员变量_34

 

8、isLocked方法。

ReentrantLock源码(二)_成员变量_35

 

9、readObject方法。

ReentrantLock源码(二)_父类_36

 

10、

五、AbstractQueuedSynchronizer类中的方法。

-1、成员变量目录。

ReentrantLock源码(二)_成员变量_37

ReentrantLock源码(二)_成员变量_38

 

0、方法目录。

ReentrantLock源码(二)_父类_39

ReentrantLock源码(二)_内部类_40

ReentrantLock源码(二)_父类_41

 

1、acquire方法。

ReentrantLock源码(二)_成员变量_42

 

2、getState方法。

ReentrantLock源码(二)_父类_43

 

3、setState方法。

ReentrantLock源码(二)_父类_44

 

4、compareAndSetState方法。

ReentrantLock源码(二)_内部类_45

 

5、compareAndSetHead方法。

ReentrantLock源码(二)_父类_46

 

6、compareAndSetTail方法。

ReentrantLock源码(二)_父类_47

 

7、 compareAndSetWaitStatus方法。

ReentrantLock源码(二)_成员变量_48

 

8、compareAndSetNext方法。

ReentrantLock源码(二)_成员变量_49

 

9、acquireInterruptibly方法。

ReentrantLock源码(二)_内部类_50

 

10、tryAcquireNanos方法。

ReentrantLock源码(二)_内部类_51

 

11、addWaiter方法。

ReentrantLock源码(二)_内部类_52

 

12、acquireQueued方法。

ReentrantLock源码(二)_内部类_53

 

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

ReentrantLock源码(二)_成员变量_54

 

14、setInterrupt方法。

ReentrantLock源码(二)_父类_55

 

15、doAcquireInterruptibly方法。

ReentrantLock源码(二)_内部类_56

 

16、enq方法。

ReentrantLock源码(二)_父类_57

 

17、setHead方法。

ReentrantLock源码(二)_成员变量_58

 

18、setHeadAndPropagate方法。

ReentrantLock源码(二)_父类_59

 

19、tryAcquireNanos方法。

ReentrantLock源码(二)_成员变量_60

 

20、doAcquireNanos方法。

ReentrantLock源码(二)_父类_61

ReentrantLock源码(二)_父类_62

 

21、release方法。

ReentrantLock源码(二)_成员变量_63

 

22、tryRelease方法。

ReentrantLock源码(二)_内部类_64

 

23、unparkSuccessor方法。

ReentrantLock源码(二)_内部类_65

 

24、acquireShared方法。

ReentrantLock源码(二)_父类_66

 

25、tryAcquireShared方法。

ReentrantLock源码(二)_成员变量_67

 

26、doAcquireShared方法。

ReentrantLock源码(二)_成员变量_68

ReentrantLock源码(二)_内部类_69

 

27、acquireSharedInterruptibly方法。

ReentrantLock源码(二)_成员变量_70

 

28、doAcquireSharedInterruptibly方法。

ReentrantLock源码(二)_成员变量_71

ReentrantLock源码(二)_成员变量_72

 

29、tryAcquireShareNanos方法。

ReentrantLock源码(二)_成员变量_73

 

30、doAcquireSharedNanos方法。

ReentrantLock源码(二)_父类_74

ReentrantLock源码(二)_父类_75

 

31、releaseShared方法。

ReentrantLock源码(二)_父类_76

 

32、 tryReleaseShared方法

ReentrantLock源码(二)_成员变量_77

 

33、doReleaseShared方法。

ReentrantLock源码(二)_父类_78

ReentrantLock源码(二)_内部类_79

 

34、hasQueuedThreads方法。

ReentrantLock源码(二)_父类_80

 

35、hasContended方法。

ReentrantLock源码(二)_成员变量_81

 

36、isQueued方法。

ReentrantLock源码(二)_内部类_82

 

37、hasQueuedPredecessors方法。

ReentrantLock源码(二)_成员变量_83

 

38、getQueueLength方法。

ReentrantLock源码(二)_父类_84

 

39、getQueuedThreads方法。

ReentrantLock源码(二)_内部类_85

 

40、getExclusiveQueuedThreads方法。

ReentrantLock源码(二)_成员变量_86

 

41、owns方法。

ReentrantLock源码(二)_父类_87

 

42、hasWaiters方法。

ReentrantLock源码(二)_内部类_88

 

43、getWaitQueueLength方法。

ReentrantLock源码(二)_成员变量_89

 

44、getWaitingThreads方法。

ReentrantLock源码(二)_父类_90

 

45、isHeldExclusively方法。

ReentrantLock源码(二)_成员变量_91

 

46、apparentlyFirstQueuedIsExclusive方法。

ReentrantLock源码(二)_内部类_92

 

47、isOnSyncQueue方法。

ReentrantLock源码(二)_父类_93

 

48、findNodeFromTail方法。

ReentrantLock源码(二)_内部类_94

 

49、tansferForSignal方法。

ReentrantLock源码(二)_父类_95

 

50、transferAfterCancelledWait方法。

ReentrantLock源码(二)_成员变量_96

 

51、fullRelease方法。

ReentrantLock源码(二)_内部类_97

 

52、setHead方法。

ReentrantLock源码(二)_成员变量_98

 

53、unparkSuccessor方法。

 

ReentrantLock源码(二)_成员变量_99

 

54、setHeadAndProgagate方法。

ReentrantLock源码(二)_父类_100

 

55、cancelAcquire方法。

ReentrantLock源码(二)_内部类_101

ReentrantLock源码(二)_成员变量_102

 

56、

ReentrantLock源码(二)_父类_103

ReentrantLock源码(二)_父类_104

 

57、parkAndCheckInterrupt方法。

ReentrantLock源码(二)_内部类_105

 

58、

59

六、

1、

2、

3、

4、

5、