J.U.C剖析与解读1(Lock的实现) (3)

一方面了为了更好理解(第一版本,重在理解基础,不是嘛),另一方面也是为了更好地复用前面ReentrantLock的代码(毕竟ReentrantLock其实就是读写锁的写锁,不是嘛),这里的JarryReadWriteLock的API不再与官方的ReentrantReadWriteLock相同,而是做了小小调整。直接调用相关读锁的加解锁API,已经相关写锁的加解锁API。具体看代码部分。

JarryReadWriteLock实现原理

既然需要已经确定,并且API也确定了。

那么第二步操作,就是简单思考一下,如何实现。

类成员方面:

首先,我们需要一个owner属性,来保存持有写锁的线程对象。

其次,由于写锁是可重入锁,所以我们需要一个readCount来保存重入次数。

然后,由于读锁是可以有多个线程持有的,所以我们需要一个writeCount来保存读锁持有线程数。

最后,我们需要一个waiters属性,来保存那些竞争锁失败后,还在等待(不死不休型)的线程对象。

自定义数据结构:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxdzg.html