Alluxio设计LockPool的主要目的是:
作为保存锁的一个资源池、不让任何正在使用的锁entries被evict掉、超过某个配置的高水位时后台线程evict那些没有使用的资源。
这个池子设计的很好,我们从这个LockPool的设计里也可以学习到如何自己设计一个资源池。
关键词:
存储Lock的池子(底层是个Map)、负载因子、evict线程、低水位、高水位。
定义LockPool里存储的实体资源类:Resource。
看到Resource类里有两个关键成员变量:一个是可重入的读写锁、另外一个是原子整数类型的引用次数。
其中读写锁是资源的实体,引用次数代表了当前实体被多少个线程使用。只有引用次数为0时资源才能被清理线程清理掉。
/**
* Resource containing the lock and other information to be stored in the pool.
*/
private static final