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

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 map = new HashMap();// 假设数据缓存
	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;
	}

}

你可能感兴趣的:(java多线程)