黑马程序员技术交流社区

标题: 用Java模拟缓存系统 [打印本页]

作者: 刘立波    时间: 2012-10-16 16:09
标题: 用Java模拟缓存系统
  1. import java.util.HashMap;

  2. import java.util.Map;

  3. import java.util.concurrent.locks.ReadWriteLock;

  4. import java.util.concurrent.locks.ReentrantReadWriteLock;

  5. public classCacheDemo {

  6. private Map<String,Object> cache= newHashMap<String, Object>(); //模拟缓存,每个key对应一个obj

  7. public static void main(String[] args) {

  8. }

  9. private ReadWriteLock rwl = newReentrantReadWriteLock();//定义读写锁

  10. //我们先跟去key去缓存中取数据,如果有的话,则返回对应的值,如果没有,去数据库中查找,返回查找到的值

  11. public Object getData(String key){

  12. rwl.readLock().lock();//上读锁

  13. Objectvalue = null;

  14. try {

  15. value= cache.get(key);

  16. if(value == null){//如果换从中没有的话 打开读锁

  17. rwl.readLock().unlock();

  18. rwl.writeLock();//读与写是互斥的,所以要先解开读锁,才能进行写操作(个人理解)

  19. try {

  20. value= “aaaa”;//实际是去数据库中queryDB();

  21. cache.put(key, value);//将得到的数据,存入缓存中。以后的线程直接在缓存中取值(张老师视频上没有,个人加的)

  22. }catch(Exception e) {

  23. }finally{

  24. rwl.writeLock().unlock();//释放读锁

  25. }

  26. rwl.readLock().lock();//还原读锁,防止下面的finally出现异常

  27. }

  28. }catch(Exception e) {

  29. }

  30. finally{

  31. rwl.readLock().unlock();

  32. }

  33. return value;

  34. }

  35. }

  36. 实现注意事项:此锁最多支持 65535 个递归写入锁和 65535 个读取锁。试图超出这些限制将导致锁方法抛出 .JDK_API_1_6_zh_CN.CHM::/java/lang/Error.html]Error。读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2