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

快三豹子遗漏:java多线程类ReentrantReadWriteLock读写锁实例代码及内存缓存工具类

上海快三今日开奖走势国结果 www.6r52v.cn 主要分享两个代码

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
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友
  • 农业农村部2017年返乡下乡双创人员达740万人 2019-04-24
  • A站受黑客攻击:近千万条用户数据外泄 涉ID及密码等 2019-03-29
  • 语文水平太差,直通通的转不弯来,又怎么表现逻辑大师的水平,忽悠成为自我暴露 2019-03-25
  • 亚冠-曾诚神扑救主 中超德比权健主场0-0恒大 2019-03-25
  • 看好啦!是时候表演真正的技术了 2019-03-16
  • 楼市下半年或持续降温 房地产长效机制加速推进 2019-03-16
  • “世界杯时间”,以独特方式展现中国元素 2019-01-11
  • 香港迪士尼推“无现金”体验便利游客 2019-01-11
  • 华媒:荷兰超市提倡减少使用一次性塑料制品 2018-07-13
  • 抓住党的建设着力点,焕发全党蓬勃活力  2018-07-12
  • 湖州市从细从实依法治路 2018-07-12
  • 【新时代 新作为 新篇章】“煤老大”渐行渐远 新动能清风徐来 2018-07-11
  • 西部网(陕西新闻网)www.cnwest.com 2018-07-11
  • 平凡人生闪耀璀璨的生命光华——“中国网事·感动2017”颁奖典礼侧记 2018-07-10
  • 为什么截留信马克的帖子?这还有摆事实讲道理存在吗? 2018-07-10
  • 43| 416| 761| 808| 544| 85| 242| 466| 850| 605|