您的位置:首页 > 编程语言 > Java开发

java多线程学习10-使用ReentrantReadWriteLock的一个例子

2017-04-10 23:02 736 查看
package com.cwj.test410;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteTest {
private final static Map<String, Object> map = new HashMap<String, Object>();// 假设数据缓存
private final static ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();

public static void main(String[] args) {
for (int i = 0; i < 1000000; i++) {
System.out.println(readWrite(i + "hha"));
}
}

public static Object readWrite(String id) {
Object value = null;
readWriteLock.readLock().lock();// 开启读锁
try {
value = map.get(id);
if (value == null) {
readWriteLock.readLock().unlock();
readWriteLock.writeLock().lock();
try {
if (value == null) {
value = "aaa";
map.put(id, value);
}
} finally {
readWriteLock.writeLock().unlock();
}
readWriteLock.readLock().lock();
}
} catch (Exception e) {
} finally {
readWriteLock.readLock().unlock();
}
return value;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: