`

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 读写锁代码

    下面我们将详细探讨Java读写锁的概念、实现原理以及如何在实际代码中应用。 1. **读写锁概念**: - 读写锁分为读锁(共享锁)和写锁(独占锁)。读锁允许多个线程同时读取数据,而写锁只允许一个线程进行写操作。 ...

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

    Java的多线程编程中,读写锁(ReadWriteLock)是一种高效的并发控制机制,它将锁的权限进行了区分,允许多个线程同时读取资源,但仅允许一个线程进行写入操作。这种设计模式提高了数据共享的效率,因为读操作通常...

    关于读写锁算法的Java实现及思考

    在Java中,`java.util.concurrent.locks`包下的`ReadWriteLock`接口提供了读写锁的抽象定义,具体实现由`ReentrantReadWriteLock`类提供。`ReentrantReadWriteLock`实现了`ReadWriteLock`接口,提供了`readLock()`和...

    Java编程读写锁详解

    在Java中,读写锁是通过ReadWriteLock接口实现的,该接口提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。 读写锁的基本规则是: * 读...

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

    - **读写锁**: 除了ReentrantLock,Java还提供了ReadWriteLock接口,它包含两个Lock对象:一个用于读操作(ReadLock),允许多个线程同时读取共享资源;另一个用于写操作(WriteLock),一次只允许一个线程写入。...

    23 按需上锁—ReadWriteLock详解.pdf

    《Java并发编程学习宝典(漫画版)》中提到的23章主要讲解了Java并发编程中的一个重要概念——ReadWriteLock,即读写锁。ReadWriteLock是`java.util.concurrent.locks`包下的一个接口,它是对传统互斥锁的一个扩展,...

    多线程(22)读写锁分离模式1

    Java中提供了`java.util.concurrent.locks.ReadWriteLock`接口来支持这种模式,但在本案例中,我们将模拟实现一个读写锁来理解其基本原理。 1. **读写锁接口定义**: - `Lock`接口:这是基础的锁接口,提供了获取...

    java多线程-读写锁原理

    在Java多线程编程中,读写锁是一种高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入。这种锁的引入提高了并发性能,特别是在读操作远多于写操作的场景下。Java 5开始,`java.util.concurrent....

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

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

    8、读写锁ReentrantReadWriteLock&StampLock详解.pdf

    根据提供的文件信息,本文将详细解析读写锁`ReentrantReadWriteLock`以及`StampLock`在Java并发编程中的应用场景及其实现原理。 ### 一、读写锁介绍 #### 1.1 读写锁的基本概念 读写锁是一种特殊的锁机制,它可以...

    redisson实现分布式锁java源码

    redisson实现分布式锁java源码软件架构:SpringBoot2.3.12.RELEASE + Maven3.6.2 + JDK1.8 + Redis-x64-3.2.100 + ...源代码中包含读写锁ReadWriteLock、常规锁和red锁,可通过controller包进去分别阅读源码和调试

    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`接口定义了读写锁的行为,其具体实现类如`ReentrantReadWriteLock`。 ### 总结 Java中的锁机制对于保证多线程环境下的数据一致性至关重要。通过了解不同类型的锁及其特性,开发者可以根据实际...

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

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

    Java并发锁简介-动力节点共9页.pdf.zip

    3. **读写锁(ReadWriteLock)**:读写锁也是`java.util.concurrent.locks`的一部分,它为读操作和写操作提供不同的锁。读锁是共享的,允许多个线程同时读取数据;写锁是独占的,一次只有一个线程能写数据。这种设计...

    Java中的锁分类与使用.docx

    - **读写锁**(如ReadWriteLock)进一步细分为读锁和写锁,读锁可被多个线程共享,写锁是独占的,提高了读操作的并发性。 4. **可重入锁** - 可重入锁允许同一个线程多次获取同一把锁,例如Java的`synchronized`...

    提升Java的锁性能Java开发Java经验技巧共5页.p

    - **使用读写锁**:`ReadWriteLock`允许多个读取者同时访问,只有写入者时才会阻塞其他线程,提高并行性。 - **尝试使用乐观锁**:乐观锁假设冲突很少发生,只有在更新数据时检查是否被其他线程修改过,例如使用...

    java常用锁使用demo工程

    - **读写锁(ReadWriteLock)**:ReentrantReadWriteLock是Lock的一个实现,分为读锁(ReadLock)和写锁(WriteLock),允许多个读线程同时访问,但写锁是独占的。 - **条件变量(Condition)**:Lock接口提供了一...

Global site tag (gtag.js) - Google Analytics