黑马程序员-java缓存系统关键代码

来源:互联网 发布:淘宝客服一天接待人数 编辑:程序博客网 时间:2024/06/03 13:01

----------------------android培训java培训、期待与您交流! ----------------------

java 的多线程感觉是最难掌握的。又一次的复习了多线程。写了一个缓存数据的demo废话不多说看代码。

/** * 读写锁 缓存数据 */private static Map<String, Object> cache = new HashMap<String, Object>();private ReadWriteLock lock = new ReentrantReadWriteLock();private  volatile boolean isEmpty = true;Object value = null;public Object get(String key){try {lock.readLock().lock();value = cache.get(key);if(value == null){lock.readLock().unlock(); /** 如果多个线程都走到这里那个都解读锁 有个上写锁。写入数据后加上读锁释放写锁*/lock.writeLock().lock();/** 有一个线程加上写锁开始写入数据*/if(isEmpty){            /** 后面的线程检查数据已经有了就直接上读锁 释放写锁*/value = "aaa";cache.put(key, value);isEmpty = false;}lock.readLock().lock();lock.writeLock().unlock();}return value;} catch (Exception e) {e.printStackTrace();}finally{lock.readLock().unlock();}return value;}


 

原创粉丝点击