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、

2、

4、

5、

6、

7、

8、

9、

六、

1、

2、

3、

4、

5、

猜你喜欢

转载自www.cnblogs.com/igoodful/p/9547562.html