使用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; } }
相关推荐
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...
### Java.util.concurrent同步器框架详解 #### 概述 Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范...
4. **java.util.concurrent.locks** 包:这个包提供了高级锁机制,包括ReentrantLock、ReadWriteLock等。ReentrantLock可重入锁比内置的synchronized更灵活,提供了公平性和非公平性选择,以及尝试锁定、定时锁定...
总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
在Java中,`java.util.concurrent.locks.ReadWriteLock`接口提供了这种功能,它有两个主要的方法:`readLock()` 和 `writeLock()`. 这两个方法分别返回一个读锁和写锁,它们可以被不同的线程独立获取和释放,从而...
本资源包含两个 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包含ReentrantLock,它是可重入的互斥锁,以及读写锁ReadWriteLock。 7. **ThreadLocalRandom**:虽然这个特性在Java 7中引入,但backport库可能也包括了对它的支持,允许线程本地随机数...
3. **`java.util.concurrent.locks`包**:包含锁和条件变量的实现,如`ReentrantLock`、`ReadWriteLock`等,它们提供了比`synchronized`更灵活的锁机制。 4. **`java.util.concurrent.atomic`和`java.util....
Java JUC的使用1.volatile关键字-内存可见性2.原子变量-CAS算法3.ConcurrentHashMap锁分段机制4....线程按序交替9.ReadWriteLock读写锁10.线程八锁11.线程池12.线程调度13.ForkJoinPool 分支/合并框架 工作窃取
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
`java.util.concurrent.locks`包提供了更高级的锁,如`ReentrantLock`、`ReadWriteLock`,提供了可中断和公平性等更灵活的特性。 8. **并发编程模式**:如生产者-消费者模式、读写锁模式、双检锁(DCL)模式、工兵...
- `java.util.concurrent.locks.ReadWriteLock` 提供了读写锁,允许多个读线程同时访问,但写线程独占资源,提高了并发性能。 在`demoSynchrony.java`这个示例文件中,可能包含了上述一种或多种线程同步技术的实践...
在Java中,`java.util.concurrent.locks.ReadWriteLock`接口定义了读写锁,`ReentrantReadWriteLock`类实现了这一接口。 6. **CountDownLatch**:这是一个计数器,可以用于让一个线程等待其他线程完成操作。在初始...
2. **Executor框架**:`java.util.concurrent.Executor`是执行任务的核心接口,它定义了运行任务的方法。`ExecutorService`是Executor的一个子接口,提供了管理和控制执行器的额外功能,如`shutdown()`用于关闭执行...
java.util.concurrent.locks包提供了更细粒度的锁控制,如ReentrantLock和ReadWriteLock,它们允许更灵活的同步策略。ReentrantLock具有与`synchronized`相同的基本行为,但提供了额外的功能,如公平锁和条件变量。...
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(); ...