zoukankan      html  css  js  c++  java
  • 利用Java的读写锁实现缓存的设计

    Java中的读写锁:

    多个读锁不互斥, 读锁与写锁互斥, 写锁与写锁互斥, 这是由JVM自行控制的,我们只要上好相应的锁即可。

    缓存的设计:

    package com.cn.gbx;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    public class CacheDesign {
    	private Map<String, Object> cache = new HashMap<String, Object>();
    	//对象锁的设计
    //	public synchronized Object getData(String key){
    //		Object value = null;
    //		value = cache.get(key);
    //		if (value == null) {
    //			value = "queryDao";
    //			cache.put(key, value);
    //		}
    //		return value;
    //	}
    	//可重入锁的设计
    	static ReadWriteLock rwl = new ReentrantReadWriteLock(); 
    	public synchronized Object getData(String key){
    		Object value = null;
    		rwl.readLock().lock();
    		try {
    			value = cache.get(key);
    			if (value == null) {
    				rwl.readLock().unlock();
    				rwl.writeLock().lock();
    				try{
    					if (value == null) {  //确保后边的线程不会重读写
    						value = "queryDao";
    						cache.put(key, value);
    					}
    				}finally{
    					rwl.writeLock().unlock();
    				}
    				rwl.readLock().lock();
    			}
    		}finally{
    			rwl.readLock().unlock();
    		}
    		return value;
    	}
    	
    	public static void main(String[] args) {
    		
    	}
    }
    

      

  • 相关阅读:
    自定义轮播图、自定义集合控件的实现
    推荐一个比较好用的工具
    博客迁移至简书
    ReactiveCocoa学习资料
    Xcode常用快捷键
    iOS自定义字体
    cocoapod的安装与使用
    iOS开发笔记
    UIWebView的三种加载方式
    项目常用第三方库
  • 原文地址:https://www.cnblogs.com/E-star/p/3484064.html
Copyright © 2011-2022 走看看