最代码广告位
最代码伊成的gravatar头像
最代码伊成2015-12-17 15:53:25

java多线程类ReentrantReadWriteLock读写锁实例代码及内存缓存工具类

主要分享两个代码

1.ReentrantReadWriteLock 读写demo

2.利用ReentrantReadWriteLock写一个内存工具类

 

ReentrantReadWriteLock 读写demo

代码片段如下:

        private Object data = null;//模拟数据
	private ReentrantReadWriteLock RWL = new ReentrantReadWriteLock();// 创建一个读写锁对象
	
	//读取数据方法
	public void get(){
		RWL.readLock().lock();//上读锁
		System.out.println(Thread.currentThread().getName()+" 这个时候只能读数据咯....");
		try {
			Thread.sleep((long)new Random().nextInt(10000));
		} catch (Exception e) {
			// TODO: handle exception
		}
		System.out.println(Thread.currentThread().getName()+" 发现可读数据--->:"+data);
		RWL.readLock().unlock();//释放读锁
	}

运行结果图,如下:

java多线程类ReentrantReadWriteLock读写锁实例代码及内存缓存工具类

写在后面

ReentrantReadWriteLock会使用两把锁来解决问题,一个读锁,一个写锁
线程进入读锁的前提条件:
   没有其他线程的写锁,
    没有写请求或者有写请求,但调用线程和持有锁的线程是同一个


线程进入写锁的前提条件:
   没有其他线程的读锁
    没有其他线程的写锁

 

读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的。

如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁,

如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁!

 

----------------------------------------------- 黄金分割线 -----------------------------------------------------

最后根据以上代码,整合一个 内存缓存工具类

代码不做解释了,里面都有注释,有需要的牛牛,快来下载吧!

代码片段如下:

            // 缓存
	    private Map<K, V> cache = new HashMap<K, V>();
		
	    private final ReentrantReadWriteLock RL = new ReentrantReadWriteLock();
	    private final Lock R = RL.readLock();
	    private final Lock W = RL.writeLock();

	    /**
	     * 根据key获取缓存信息
	     * 
	     * @param key
	     * 
	     * @return
	     */
	    public V get(K key){
	    	R.lock();
	    	try{
	    		return cache.get(key);
	    	} finally {
	    		R.unlock();
	    	}
	    }
	    
	    /**
	     * 设置缓存
	     * 
	     * @param key
	     * @param value
	     */
	    public void put(K key, V value){
	    	W.lock();
	    	
	    	try{
	    		cache.put(key, value);
	    	} finally {
	    		W.unlock();
	    	}
	    }
文件名:demo.zip,文件大小:8.582K下载
  • /
      • /demo
        • /demo/.classpath
        • /demo/.project
          • /demo/.settings
            • /demo/.settings/org.eclipse.jdt.core.prefs
          • /demo/bin
              • /demo/bin/com
                  • /demo/bin/com/zuidaima
                      • /demo/bin/com/zuidaima/thread
                        • /demo/bin/com/zuidaima/thread/Demo1.class
                        • /demo/bin/com/zuidaima/thread/MemoryCacheUtil.class
                        • /demo/bin/com/zuidaima/thread/ReadWriteLockDemo$1.class
                        • /demo/bin/com/zuidaima/thread/ReadWriteLockDemo$2.class
                        • /demo/bin/com/zuidaima/thread/ReadWriteLockDemo.class
最代码最近下载分享源代码列表最近下载
小东东2月28日
暂无贡献等级
tianzhidao282月26日
最代码贡献等级说明
Gss_老伞2月11日
暂无贡献等级
好我累个去哦2016年11月14日
最代码贡献等级说明
好脑壳2016年11月9日
最代码贡献等级说明
ddr2016年10月27日
最代码贡献等级说明
ww49512016年8月16日
最代码贡献等级说明
ypf83122016年5月19日
最代码贡献等级说明
信仰你的J2016年5月12日
最代码贡献等级说明
qizhongming2016年3月1日
暂无贡献等级
最代码最近浏览分享源代码列表最近浏览
暂无贡献等级
Watson7月18日
最代码贡献等级说明
zes1234567月17日
暂无贡献等级
谎言丶7月16日
暂无贡献等级
justxq7月14日
暂无贡献等级
binggo7月12日
最代码贡献等级说明
mizore7月12日
暂无贡献等级
zoeban7月10日
最代码贡献等级说明
Ckxlnd7月7日
最代码贡献等级说明
最代码广告位
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友