已注销用户
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();//释放读锁 }
运行结果图,如下:
写在后面
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
- /demo/bin/com/zuidaima/thread
- /demo/bin/com/zuidaima
- /demo/bin/com
- /demo/src
- /demo/src/com
- /demo/src/com/zuidaima
- /demo/src/com/zuidaima/thread
- /demo/src/com/zuidaima
- /demo/src/com
- /demo
相关代码
最近下载
aisuzhen LV10
2019年9月17日
springbootzxx LV5
2019年7月26日
倪卟懂 LV18
2019年5月7日
afeng992211 LV14
2018年10月12日
tyd888 LV11
2018年9月27日
superman_0001 LV5
2018年7月18日
CLATZJ LV19
2018年3月25日
der2030 LV17
2018年1月23日
15735184511 LV7
2018年1月4日
dulante LV4
2017年10月25日