`

util.Concurrent-ReadWriteLock

    博客分类:
  • Java
 
阅读更多

使用ReadWriteLock模拟简单的缓存管理器

 

package thread.lock;

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

/**
 * readLock  与 readLock  不互斥
 * readLocak 与  writeLock 互斥
 * writeLock 与  writeLock 互斥
 */
public class CacheManager {
	
	private ReadWriteLock rwl = new ReentrantReadWriteLock();
	
	private Map<String,Object> cache = new HashMap<String,Object>();
	
	public Object getValue(String key) {
		return processCacheData(key);
	}
	
	protected Object processCacheData(String key) {
		rwl.readLock().lock();
		Object obj = null;
		try {
			obj = cache.get(key);
			if(obj==null) {
				//Release read lock before acquiring write lock
				rwl.readLock().unlock();
				rwl.writeLock().lock();
				//check again
				if(obj==null) {
					obj = "get obj from somewhere";
				}
				rwl.readLock().lock();
				rwl.writeLock().unlock();
			}
		} finally {
			rwl.readLock().unlock();
		}
		return obj;
	}
	
}

 

 

分享到:
评论

相关推荐

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf

    java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...

    The java.util.concurrent Synchronizer Framework

    ### Java.util.concurrent同步器框架详解 #### 概述 Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范...

    concurrent-1.3.4-sources.jar

    4. **java.util.concurrent.locks** 包:这个包提供了高级锁机制,包括ReentrantLock、ReadWriteLock等。ReentrantLock可重入锁比内置的synchronized更灵活,提供了公平性和非公平性选择,以及尝试锁定、定时锁定...

    java.util.concurrent介绍(重要).pdf

    总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...

    java并发工具包详解

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    homework-ReadWriteLock-KristampsW-main.zip

    在Java中,`java.util.concurrent.locks.ReadWriteLock`接口提供了这种功能,它有两个主要的方法:`readLock()` 和 `writeLock()`. 这两个方法分别返回一个读锁和写锁,它们可以被不同的线程独立获取和释放,从而...

    java并发包资源

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...

    backport-util-concurrent_java_backport_

    backport-util-concurrent包含ReentrantLock,它是可重入的互斥锁,以及读写锁ReadWriteLock。 7. **ThreadLocalRandom**:虽然这个特性在Java 7中引入,但backport库可能也包括了对它的支持,允许线程本地随机数...

    J.U.C系列线程安全的理论讲解编程开发技术共6页.pdf

    3. **`java.util.concurrent.locks`包**:包含锁和条件变量的实现,如`ReentrantLock`、`ReadWriteLock`等,它们提供了比`synchronized`更灵活的锁机制。 4. **`java.util.concurrent.atomic`和`java.util....

    juconcurrent:java.util.concurrent

    Java JUC的使用1.volatile关键字-内存可见性2.原子变量-CAS算法3.ConcurrentHashMap锁分段机制4....线程按序交替9.ReadWriteLock读写锁10.线程八锁11.线程池12.线程调度13.ForkJoinPool 分支/合并框架 工作窃取

    从零基础到深入理解,教你高并发(4.3G)

    01-并发简史.avi 02-线程和进程.avi 03-创建线程的方式(1).avi 04-线程池.avi 05-forkjoin.avi 06-JVM的内存模型.avi ...12-java.util.concurrent包下的类.avi 13-ReadWriteLock.avi 14-countDownLatch.avi

    concurrent.rar

    `java.util.concurrent.locks`包提供了更高级的锁,如`ReentrantLock`、`ReadWriteLock`,提供了可中断和公平性等更灵活的特性。 8. **并发编程模式**:如生产者-消费者模式、读写锁模式、双检锁(DCL)模式、工兵...

    java 线程同步

    - `java.util.concurrent.locks.ReadWriteLock` 提供了读写锁,允许多个读线程同时访问,但写线程独占资源,提高了并发性能。 在`demoSynchrony.java`这个示例文件中,可能包含了上述一种或多种线程同步技术的实践...

    线程同步的一个小程序

    在Java中,`java.util.concurrent.locks.ReadWriteLock`接口定义了读写锁,`ReentrantReadWriteLock`类实现了这一接口。 6. **CountDownLatch**:这是一个计数器,可以用于让一个线程等待其他线程完成操作。在初始...

    java concurrent 包 详细解析

    2. **Executor框架**:`java.util.concurrent.Executor`是执行任务的核心接口,它定义了运行任务的方法。`ExecutorService`是Executor的一个子接口,提供了管理和控制执行器的额外功能,如`shutdown()`用于关闭执行...

    Concurrent_Programming

    java.util.concurrent.locks包提供了更细粒度的锁控制,如ReentrantLock和ReadWriteLock,它们允许更灵活的同步策略。ReentrantLock具有与`synchronized`相同的基本行为,但提供了额外的功能,如公平锁和条件变量。...

    JAVA Concurrent Programming

    Java 1.5引入了`java.util.concurrent`包,包含了一系列的并发工具类,如线程池、阻塞队列、并发集合等。这些工具旨在提高并发性能并简化编程模型。例如,`ExecutorService`和`ThreadPoolExecutor`提供了线程池管理...

    操作系统模拟:读写者问题

    import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class ReadWriter { private final ReadWriteLock lock = new ReentrantReadWriteLock(); ...

Global site tag (gtag.js) - Google Analytics