`

Java读写锁ReadWriteLock

 
阅读更多

1.多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥

 

package com.ronbay.thread.timer;

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

/**
 * @author Ronbay
 * 一个面试题  缓存系统
 *
 */
public class CacheDemo {

	private Map<String,Object> cache = new HashMap<String,Object>();
	
	public static void main(String[] args) {
		String name = (String)new CacheDemo().getData("key");
		System.out.println("name=" + name);
	}

	ReadWriteLock rwLock = new ReentrantReadWriteLock();
	public  Object getData(String key){
		Object value = null;
		try {
			rwLock.readLock().lock();
			//若缓存有数据直接返回
			value  = cache.get(key);
			//若缓存没有再查数据库,再返回
			if(value == null){
				rwLock.readLock().unlock();
				rwLock.writeLock().lock();
				try {
					if(value == null){
						value="aaa";  //实际是去queryDB()
					}
					
				} catch (Exception e) {
					e.printStackTrace();
				}finally{
					rwLock.writeLock().unlock();
				}
				//再加上读锁
				rwLock.readLock().lock();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			rwLock.readLock().unlock();
		}
		return value;
		
	}
}

 

分享到:
评论

相关推荐

    Java多线程编程之读写锁ReadWriteLock用法实例

    主要介绍了Java多线程编程之读写锁ReadWriteLock用法实例,本文直接给出编码实例,需要的朋友可以参考下

    Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁

    主要介绍了Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁,本文讲解了ReentrantLock概况、Lock接口、Lock使用、轮询锁的和定时锁、公平性、可中断获锁获取操作等内容,需要的朋友可以参考下

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

    java_util_concurrent_user_guide_cn.pdf 内容预览: ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference

    java并发工具包详解

    1. java.util.concurrent - Java 并发工具包 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference

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

    java_util_concurrent_user_guide_cn.pdf 内容预览: 1.... 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReferenc

    一个小的java Demo , 非常适合Java初学者学习阅读.rar

    使用 ForkJoinPool 进行分叉和合并,锁 Lock,读写锁 ReadWriteLock 原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据: 一 服务端修改数据: 一 文章知识点与官方知识档案匹配,可进一步学习相关...

    Java多线程之readwritelock读写分离的实现代码

    主要介绍了Java多线程之readwritelock读写分离的相关内容,文中涉及具体实例代码,具有一定参考价值,需要的朋友可以了解下。

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

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference

    详解java多线程的同步控制

    目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ReadWriteLock倒计数器 CountDownLatch循环栅栏 CyclicBarrier信号量 Semaphore 线程安全 Thread Safety JMM JMM(Java Memory Model)是一种基于计算机内存...

    java并发包资源

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference

    java并发编程-AQS和JUC实战

    ReadWriteLock读写锁;CountDownLatch计时器;CyclicBarrier循环栅栏; 重⼊锁可以完全替代synchronized关键字。在JDK5.0的早期版本中,重⼊锁的性能远远好于 synchronized,但从JDK6.0开始,JDK在synchronized上做...

    Java 8无人谈及的八大功能

    其中之一是经典的读写锁(ReadWriteLock),它让你把代码分成两部分:需要互斥的写操作和不需要互斥的读操作。  表面上看起来很不错。问题是读写锁有可能是极慢的(多10倍),这已经和它的初衷相悖了。Java8引入了...

    尚硅谷Java视频_JUC 视频教程

    尚硅谷_JUC线程高级_ReadWriteLock 读写锁 ·12. 尚硅谷_JUC线程高级_线程八锁 ·13. 尚硅谷_JUC线程高级_线程池 ·14. 尚硅谷_JUC线程高级_线程调度 ·15. ForkJoinPool 分支合并框架-工作窃取

    java7hashmap源码-to-be-architect:成为Java架构师,你应该学习这些

    可重入读写锁ReetrantReadWriteLock Condition ReadWriteLock LockSupport 并发类编程工具 CountDownLatch CyclicBarrier Semaphore Exchange 并发编程容器collections 并发Queue:BlockingQueue Map:...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    juconcurrent:java.util.concurrent

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

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段16讲、多线程读写锁分离设计模式讲解-上.mp4 │ 高并发编程第二阶段17讲、多线程读写锁分离设计模式讲解-中.mp4 │ 高并发编程第二阶段18讲、多线程读写锁分离设计模式讲解-下.mp4 │ 高...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段16讲、多线程读写锁分离设计模式讲解-上.mp4 │ 高并发编程第二阶段17讲、多线程读写锁分离设计模式讲解-中.mp4 │ 高并发编程第二阶段18讲、多线程读写锁分离设计模式讲解-下.mp4 │ 高...

    rxcache:LRU缓存库并支持Rx

    简介Library项目地址: RxCache是一个本地缓存功能库,采用Rxjava+DiskLruCache来实现,线程安全内部采用ReadWriteLock机制防止频繁读写缓存造成的异常,可以独立使用,单独用RxCache来存储数据。也可以采用...

Global site tag (gtag.js) - Google Analytics