用锁降级或者synchronized实现一个缓存
参考了很多网上的代码,发现大部分都是一模一样的,而且是错的,根本没有实现缓存
自己找了很久,发现了他们分别对应的问题A和B
// syn实现缓存里面最关键的步骤
synchronized (map) {
value = map.get(key);// A 这一行不能少
if (value == null) {
value = "abc";
if (value == null) {
try {
rwl.readLock().unlock();//关闭读锁
rwl.writeLock().lock();//开启写锁
// B 这个地方需要再检查一下,不检查的话,这个缓存就实现不了
value = map.get(key);
代码如下:
package duoxiancheng.reentrantLock.read;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheMap {
//声明一个map,用来作为缓存模型
private s