最代码伊成的彩票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();
	    	}
	    }

打赏

已有2人打赏

ddr的彩票gravatar头像最代码官方的彩票gravatar头像

文件名: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
最代码最近下载分享源代码列表最近下载
倪卟懂 LV145月7日
月亮月亮月亮星星星星
afeng992211 LV142018年10月12日
月亮月亮月亮星星星星
tyd888 LV92018年9月27日
月亮月亮星星
superman_0001 LV52018年7月18日
月亮星星
CLATZJ LV182018年3月25日
太阳星星星星
der2030 LV172018年1月23日
太阳星星
15735184511 LV72018年1月4日
月亮星星星星星星
dulante LV42017年10月25日
月亮
branice LV182017年9月5日
太阳星星星星
Edson188 LV222017年8月14日
太阳月亮星星星星
最代码最近浏览分享源代码列表最近浏览
ZYDREAM LV25月15日
星星星星
lxh395601769 LV65月14日
月亮星星星星
k15010191026 LV35月14日
星星星星星星
a1457363684 LV25月14日
星星星星
wangyz LV75月13日
月亮星星星星星星
Red蒲公英 LV65月10日
月亮星星星星
chenghao4u LV75月8日
月亮星星星星星星
倪卟懂 LV145月7日
月亮月亮月亮星星星星
vclulu LV15月6日
星星
coolyuan5月2日
暂无贡献等级
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友