`
747017186
  • 浏览: 333873 次
社区版块
存档分类
最新评论

java缓存器的编写

 
阅读更多

前一段学习过java当中readWriteLock的使用,运用所学编写一个缓存器。

package thread;

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

public class CacheTest {
	private Map<String, Object> cache = new HashMap<String, Object>();
	public static void main(String[] args) {
		
	}
	
	private ReadWriteLock rwl = new ReentrantReadWriteLock();
	/**
	 * 如果多个线程来读取缓存可以同时读取,但是写入缓存的必须是一个 
	 * @param key
	 * @return
	 */
	public Object getDate(String key) {
		rwl.readLock().lock();//线程加载读锁
		Object value = null;
		try {
			value = cache.get(key);
			if(value == null) {//如果缓存为空
				rwl.readLock().unlock();//释放读锁
				rwl.writeLock().lock();//加载写锁
				try {
					if(value == null) {//如果多个线程同时来写,则一个线程写成功了,另外写锁的线程不需要操作
						value = "查询数据库获取数据!";
						cache.put(key, value);//放入缓存
					}
				} finally {
					rwl.writeLock().unlock();//释放写锁
				}
				rwl.readLock().lock();//加上读锁
			}
		} finally {
			rwl.readLock().unlock();//释放读锁
		}
		return value;
	}
}

 以后对于读写锁有更多的应用,缓存是必不可少的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics