java5以后在java.util.concurrent包下,有很多的并发类,可以让我们摆脱java5时,笨重的写法来满足多线程,而且提供了更加丰富的使用场景能力

其中,在locks包下,提供了

ReentrantReadWriteLock和ReentrantLock来帮助 我们来完成读写锁的能力

WriteLock可以降级为ReadLock,顺序是:先获得WriteLock再获得ReadLock,然后释放WriteLock,这时候线程将保持Readlock的持有。反过来ReadLock想要升级为WriteLock则不可能

public class Cache {
static Map<String, Object> map = new HashMap<String, Object>();
static ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
static Lock r = rwl.readLock();
static Lock w = rwl.writeLock();
// 获取一个key对应的value
public static final Object get(String key) {
r.lock();
try {
return map.get(key);
} finally {
r.unlock();
}
}
// 设置key对应的value,并返回旧有的value
public static final Object put(String key, Object value) {
w.lock();
try {
return map.put(key, value);
} finally {
w.unlock();
}
}
// 清空所有的内容
public static final void clear() {
w.lock();
try {
map.clear();
} finally {
w.unlock();
}
}
}

参考:

http://my.oschina.net/adan1/blog/158107

http://www.cnblogs.com/liuling/p/2013-8-21-03.html

http://www.codeceo.com/article/java-rd-lock.html#0-tsina-1-4678-397232819ff9a47a7b7e80a40613cfe1

最新文章

  1. UDS(ISO14229-2006) 汉译(No.2参考标准)
  2. CSS3 之 flexbox 响应式的未来
  3. 如何在两个activity之间传递bitmap
  4. [转]设计模式之六大原则——开闭原则(OCP)
  5. MATLAB 函数
  6. mysql基本数据类型(mysql学习笔记三)
  7. IOS中用模型取代字典的好处
  8. Effective c++ 第一章 让自己习惯C++
  9. 计算textView的高度
  10. c# 配置连接 mysql
  11. [方法]本来好的中文在winEdt中打开变成乱码
  12. Android 开发笔记___SD卡文件操作
  13. 用python做小说网站
  14. python实战--数据结构二叉树
  15. kvm虚拟化2-qemu-kvm
  16. Vuex之理解Getters的用法
  17. RC4被JDK8默认禁用导致腾讯QQ邮箱无法访问
  18. Erlang
  19. HDU.2899.Strange fuction(牛顿迭代)
  20. [ Laravel 5.1 文档 ] 服务 —— 任务调度

热门文章

  1. Oracle列操作(增加列,修改列,删除列)
  2. JQuery一些基础笔记
  3. Node.js-提供了四种形式的定时器
  4. Java里的if else语句例子
  5. 4.2.1 网络请求之HTTP
  6. Hibernate映射之OneToOne(第二篇)
  7. Agile Software Development ——敏捷开发
  8. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
  9. [ucgui] 对话框2——小窗口初始化与消息响应
  10. C语言实现冒泡排序-整数排序