<!--
package cn.test;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheDemo {
private final ReadWriteLock rwl = new ReentrantReadWriteLock(); //读写锁
private final Lock rl = rwl.readLock();
private final Lock wl = rwl.writeLock();
private Map<String, Object> cache = new HashMap<String, Object>();
public static void main(String[] args) {
final CacheDemo support = new CacheDemo();
for(int j=0;j<10;j++){ //写入
final String key= "key"+j;
new Thread(new Runnable() {
public void run() {
support.put(key,key);
}
}).start();
new Thread(new Runnable() { //读取
public void run() {
support.getData(key);
}
}).start();
}
}
//取
public Object getData(String key){
rl.lock();
System.out.println("开始读取缓存数据....."+Thread.currentThread().getName());
Object value = null;
try{
value = cache.get(key);
if(value == null){
rl.unlock();
wl.lock();
try{
if(value==null){
value = "no";//实际失去queryDB();
}
}finally{
wl.unlock();
}
rl.lock();
}
System.out.println(Thread.currentThread().getName()+"-- 读 : {key:"+key+",value: "+value+"}");
}finally{
System.out.println("结束读取缓存数据....."+Thread.currentThread().getName());
rl.unlock();
}
return value;
}
//存
public void put(String key,Object value){
wl.lock();
System.out.println("开始写入缓存数据....."+Thread.currentThread().getName());
try{
Thread.sleep(1000);
if(key != null){
cache.put(key, value);
}
System.out.println(Thread.currentThread().getName()+"-- 写 : {key:"+key+",value: "+value+"}");
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("结束写入缓存数据....."+Thread.currentThread().getName());
wl.unlock();
}
}
}
-->