读书人

java中读写锁的兑现及使用读写锁简单实

发布时间: 2012-09-11 10:49:03 作者: rapoo

java中读写锁的实现及使用读写锁简单实现缓存系统的实例

读写锁是线程读写同一文件所需要用到的,读写锁是什么东西在这里不做过多的解释,可以自己去百度或谷歌去搜一下。

谨在此附上我自己写的缓存系统的简单实现,你从中也能悟出缓存实现的基本思想

缓存里面有数据就从缓存中取,没有就给你从其他地方得到。

[java] view plaincopyprint?
  1. package cn.com.scl.cache
  2. import java.util.HashMap; import java.util.Map;
  3. import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
  4. /** * 缓存的实现,每个线程只能获得他自己的缓存,也应该是单例的
  5. * 本类没有去实现单例,如果需要的话可以自行去实现 * @author scl
  6. * */
  7. public class CacheSystem { private Map<String, Object> cache = new HashMap<String,Object>();
  8. private ReadWriteLock rwl = new ReentrantReadWriteLock(); public Object getData(String key){
  9. //先从缓存中去取数据,先加上读锁 rwl.readLock().lock();
  10. Object obj = null; try{
  11. obj = cache.get(key); if(obj == null){
  12. //先解除读锁,在上写锁(必须先解除读锁才能成功上写锁) rwl.readLock().unlock();
  13. rwl.writeLock().lock(); //去数据库取数据,再判断一次是否为null,因为有可能多个线程获得写锁
  14. try{ if(obj == null){
  15. obj = new String("obj is get from db"); }
  16. }finally{ //先上读锁,然后再解除写锁(这样可以成功完成,在解除写锁前获得读锁,写锁被降级--这翻译的api上的)
  17. rwl.readLock().lock(); rwl.writeLock().unlock();//解除写锁,读锁仍然持有
  18. } }
  19. }finally{ rwl.readLock().unlock();
  20. } return obj;
  21. }
  22. }

读书人网 >编程

热点推荐