ZooKeeper 分布式锁 Curator 源码 02:可重入锁重复加锁和锁释放
前言
加锁逻辑已经介绍完毕,那当一个线程重复加锁是如何处理的呢?
锁重入
在上一小节中,可以看到加锁的过程,再回头看 这个方法。

加锁成功之后,将当前线程放到 中,threadData 是 类型的,不用担心并发问题。
假如锁重入了,直接就会在上一部分 被拦下,然后执行 。
对 lockCount 自增,代表了锁重入。
这里发现了吧!Curator 的锁重入是在 Java 代码中实现的。
锁释放
当锁需要释放的时候,只需要调用 lock.release() 进行释放即可,具体是如何释放的呢?

主要分为两部分:
releaseLock 方法中就没有多少复杂逻辑了,就是移除监听器,删除临时顺序节点。 也就是 。
总结
ZooKeeper 的 InterProcessMutex 锁是通过 Java 代码中维护了一个 lockCount 来判断是否重入的。
