`
Luob.
  • 浏览: 1588615 次
  • 来自: 上海
社区版块
存档分类
最新评论

java 使用读写锁设计一个缓存模型

    博客分类:
  • Java
阅读更多

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

/**
 * 使用读写锁  实现一个 缓存模型
 *
 */
public class CasheDemo {

	/**
	 * @param args
	 */
	private Map<String,Object> cache=new HashMap<String, Object>();
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	
	/*
	public synchronized Object getData(String key){
		Object value=cache.get(key);
		if(value==null){
			value="aaa"; //实际去queryDB();
		}
		return value;
	}*/

	//多个线程 读取的时候 可以同时并发.不会造成数据的破坏与冲突,
	//但发现 数据为空的时候,该线程 改成 写锁 用来填充数据,写完后变成 读锁.
	private ReadWriteLock rwl=new ReentrantReadWriteLock();
	public Object getData(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="aaa"; //实际去queryDB();
				} catch (Exception e) {
					// TODO: handle exception
				}finally{
					rwl.writeLock().unlock();
				}
				rwl.readLock().lock();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			rwl.readLock().unlock();
		}
		return value;
	}

}
分享到:
评论

相关推荐

    基于zookeeper实现的分布式读写锁

    Zookeeper基于一个分布式文件系统的模型,每个节点(称为Znode)都可以存储数据并监听其他节点的变化。 **二、分布式读写锁** 分布式读写锁是一种确保多线程或跨节点之间对共享资源正确访问的机制。在读写锁中,多...

    cpu 内存模型和java内存模型

    volatile关键字是Java内存模型中一个非常重要的概念,它保证了变量的可见性,即任何线程对该变量的修改都会立即被其它线程得知,但并不保证操作的原子性。 ### 锁机制 在Java中,锁是一种同步机制,用来控制多个...

    Java 内存模型

    总之,Java内存模型是Java编程中的一个基础性话题,它定义了Java程序在多线程环境下关于数据共享、线程通信和同步的规则和约束。深入掌握Java内存模型对于编写高效且正确的Java多线程程序有着不可忽视的作用。程序员...

    Java IO学习基础之读写文本文件

    通过在读写过程中加入一个缓存区,可以减少磁盘访问次数,从而提升整体性能。Java中提供了`BufferedReader`和`BufferedWriter`来支持字符缓冲流的操作,它们分别继承自`Reader`和`Writer`类,并且内部维护了一个固定...

    DistributedRW:用Java编写的分布式读写文件系统

    本文将详细解析标题为“DistributedRW”的项目,它是一个使用Java编程语言实现的分布式读写文件系统。这个系统设计的目标是为了在多台机器之间高效、可靠地分发和处理大文件,提高数据的存取性能,并确保数据的一致...

    深入理解Java内存模型

    Java内存模型是并发编程中一个至关重要的概念,它定义了共享变量的访问规则,以及这些变量如何在多线程环境下进行读写操作。在深入理解Java内存模型之前,我们需要先了解并发编程模型的分类,然后掌握Java内存模型的...

    深入理解Java内存模型 pdf 超清版

    Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了程序中各个线程如何访问和修改共享变量,以及如何确保数据的一致性。深入理解Java内存模型对于编写高效的并发程序至关重要。本文...

    java线程-Java内存模型

    当一个线程修改了共享变量,并写回缓存,但其他线程可能无法立即感知到这一变化,因为它们可能还在使用旧的缓存值。Java内存模型通过使用volatile关键字来解决这个问题。volatile确保了对变量的修改对其他线程立即...

    Java内存模型知识汇总

    当多个缓存共享同一份数据时,如果一个缓存对数据的修改没有及时通知到其他缓存,就会导致数据不一致。 Java内存模型是在计算机内存模型的基础上,对共享内存多线程程序语言设计的抽象。在多线程环境下,不同的线程...

    深度剖析java内存模型

    在Java内存模型中,线程之间的通信需要经过两个步骤:首先,一个线程将更新过的共享变量从本地内存刷新到主内存;其次,另一个线程从主内存中读取这个共享变量。JMM通过控制主内存与每个线程的本地内存之间的交互,...

    实战Java高并发程序设计模式

    在Java编程领域,高并发程序设计是至关重要的一个部分,特别是在大数据处理、互联网服务和分布式系统中。"实战Java高并发程序设计模式"的主题旨在帮助开发者掌握如何在高并发环境中有效地设计和实现高效的程序。本篇...

    Java管理 系统设计报告

    - 开发一个功能全面且易于扩展的Java管理系统。 - 提高数据处理效率及准确性,简化操作流程。 - 实现对业务流程的有效监控与管理。 - 提升用户体验,支持多终端访问。 ### 二、系统架构设计 #### 2.1 技术选型 - *...

    Java+redis缓存工具类(SSM)

    SSM(Spring、SpringMVC、MyBatis)是Java企业级开发中的常见框架组合,而Redis则是一个高效的内存数据存储系统,常作为缓存使用。本项目提供了一个Java实现的Redis缓存工具类,结合SSM框架,可以帮助开发者快速地...

    java秒杀系统设计与实现.互联网工程师进阶与分析

    再者,数据一致性是秒杀系统中的另一个关键问题。在高并发下,数据库可能会面临大量的读写操作,如何保证事务的ACID特性,尤其是原子性和一致性,是系统设计的重要环节。书里会介绍乐观锁、悲观锁、分布式事务解决...

    JAVA分布式程序设计

    Java分布式程序设计是Java开发中的一个重要领域,它涉及到多个计算机节点通过网络进行协作,共同完成一个复杂的任务。在Java中,分布式系统可以实现负载均衡、高可用性、可扩展性和数据共享等功能,广泛应用于云计算...

    Java企业设计模式

    在Java中,当需要使用一个已经存在的类,但它提供的接口与我们的需求不符时,可以使用适配器模式进行转换。 6. 桥接模式:桥接模式将抽象部分与实现部分分离,使它们可以独立变化。在Java中,如果一个类有多个维度...

    实战Java高并发程序设计模式高清视频教程.zip

    在设计模式方面,我们会学习到一些经典的并发模式,如生产者消费者模式(Producer-Consumer)、读写锁模式(Read-Write Lock)和双检锁/双重校验锁(Double-Checked Locking)。这些模式有助于我们在实际项目中优雅...

Global site tag (gtag.js) - Google Analytics