多线程之ReentrantReadWriteLock
2024-10-19 00:24:48
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
最新文章
- UDS(ISO14229-2006) 汉译(No.2参考标准)
- CSS3 之 flexbox 响应式的未来
- 如何在两个activity之间传递bitmap
- [转]设计模式之六大原则——开闭原则(OCP)
- MATLAB 函数
- mysql基本数据类型(mysql学习笔记三)
- IOS中用模型取代字典的好处
- Effective c++ 第一章 让自己习惯C++
- 计算textView的高度
- c# 配置连接 mysql
- [方法]本来好的中文在winEdt中打开变成乱码
- Android 开发笔记___SD卡文件操作
- 用python做小说网站
- python实战--数据结构二叉树
- kvm虚拟化2-qemu-kvm
- Vuex之理解Getters的用法
- RC4被JDK8默认禁用导致腾讯QQ邮箱无法访问
- Erlang
- HDU.2899.Strange fuction(牛顿迭代)
- [ Laravel 5.1 文档 ] 服务 —— 任务调度
热门文章
- Oracle列操作(增加列,修改列,删除列)
- JQuery一些基础笔记
- Node.js-提供了四种形式的定时器
- Java里的if else语句例子
- 4.2.1 网络请求之HTTP
- Hibernate映射之OneToOne(第二篇)
- Agile Software Development ——敏捷开发
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- [ucgui] 对话框2——小窗口初始化与消息响应
- C语言实现冒泡排序-整数排序