private final ReentrantReadWriteLock lock;
今天在项目代码中看到一个ReentrantReadWriteLock的使用例子,刨除业务逻辑,上图所示代码中使用了可重入锁ReentrantReadWriteLock,实现了一个缓存功能,如果cache中存在valueName,返回索引,否则比较valueName与valueMetaList的元素进行比较,若相同,测存入cache。加读写锁主要是为了防止valueMetaList中出现线程不安全的问题,获取索引时(indexOfValue),加锁lock.readLock().lock(),可以防止读的过程中其他线程向valueMetaList写入数据。