`
endual
  • 浏览: 3545606 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 并发包写的一个缓存系统

    博客分类:
  • java
 
阅读更多
package endual;

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

public class CacheDemo {

	/**
	 * @param args
	 */
	
	private Map<String,Object> map = new HashMap<String,Object>();
	private ReadWriteLock rwLock = new ReentrantReadWriteLock() ;
	public static void main(String[] args) {

		
		
		
	}
	/**
	 * 一个缓存储系统
	 * @param key
	 * @return
	 */
	public synchronized Object getData (String key) {
		
		Object obj = map.get(key);
		if (null == obj) {
			System.out.println("到数据库中去取哦");
			try {
				Thread.sleep(1000*5) ;
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			obj = "data from mysql" ;
			
		}
		return obj ;
	}
	
	
	/**
	 * 一个缓存储系统,这个系统还是有问题的,你看出来了么,哈哈哈--------------------------------
	 * @param key
	 * @return
	 */
	public  Object getDataUseLock (String key) {
		rwLock.readLock().lock() ; //先把读锁给锁上
		
		Object obj = map.get(key);
		if (null == obj) { //如果发现没有数据
			rwLock.readLock().unlock() ; //那么把写锁给释放掉
			rwLock.writeLock().lock() ; //把写锁给锁起来 这样就可以写锁了
			///////////////////////-----这个个步骤是从数据库取数据的,别的人是无法来读取数据和写入数据的
			try {
				System.out.println("mysql数据库中取得数据开始。。。。。。");
				Thread.sleep(1000*5) ;
				obj = "chenwei" ;
				map.put(key, obj) ;
				System.out.println("mysql数据库中取得数据结束。。。。。。");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}finally {
				//不管有没有写好,都要释放掉这个写锁,要不死掉以后,别的线程来取得时候,就发现无法取得到写锁就一直等到就没用了
				rwLock.writeLock().unlock() ; 
			
			}
             ///////////////////////////////////////////	 
			
		}//end if
		return obj ;
	}
	
	
	

}

 

分享到:
评论

相关推荐

    JAVA高并发包介绍

    它是Java并发包中一个线程安全的有序映射表,基于跳表(Skip List)的数据结构实现。ConcurrentSkipListMap通过一种分层的多级链表来维护其内部结构,这使得它在高并发环境下不仅能够保持良好的读写性能,同时还能...

    java5 并发包 (concurrent)思维导图

    Java 5并发包(`java.util.concurrent`,简称`Concurrent`包)是Java平台中用于多线程编程的重要组成部分,它提供了丰富的并发工具类,极大地简化了在多线程环境下的编程工作。这个包的设计目标是提高并发性能,减少...

    Java互联网实时聊天系统源码.zip

    源码分析将有助于我们深入理解如何运用Java构建一个实时聊天系统,包括网络架构设计、并发控制策略、消息处理机制以及数据库交互等。通过对源码的解读,开发者可以学习到实际项目中的最佳实践,并提升自己的Java编程...

    concurrent-resource-test:Java并发包源码学习

    对Java并发包的深入理解有助于编写高效、可靠的多线程代码,这对于大型系统开发尤其重要。在实践中,你需要考虑线程安全、死锁、活锁和饥饿等问题,以及如何通过合理地使用并发工具来避免这些问题。

    Java的两种读写锁介绍

    ReentrantReadWriteLock是Java并发包`java.util.concurrent.locks`中的一个类,它提供了比`synchronized`关键字更灵活的锁机制。它允许多个读线程同时访问共享资源,但在写操作时保持互斥,从而提高系统性能。 2. ...

    Java多线程编程

    创建一个新的线程通常有两种方式:一是继承`Thread`类并重写`run()`方法,二是实现`Runnable`接口并提供`run()`方法,然后将实现类的实例传给`Thread`类的构造函数。通过调用`start()`方法启动线程,它会自动调用`...

    Java开发 及时通信系统QQ

    在Java开发领域,构建一个及时通信系统,如QQ,是一个复杂而有挑战性的任务,它涉及到网络编程、多线程、数据库交互等多个关键技术点。以下将详细阐述这些关键知识点: 1. **Java基础**:首先,Java是这个项目的...

    java多线程_java多线程下变量共享_

    3. `Atomic`类:Java并发包(`java.util.concurrent.atomic`)提供了如`AtomicInteger`、`AtomicLong`等原子类,它们提供了原子操作,如`incrementAndGet()`,在多线程环境下可以替代`synchronized`和`volatile`,实现...

    Java常见面试题 pdf.pdf

    `ReentrantLock`是Java并发包中的一个类,提供了比`synchronized`更高级别的锁定机制。它提供了公平锁和非公平锁的选择,以及尝试获取锁的功能,这使得它在某些场景下比`synchronized`更灵活。 ### 面向对象编程 #...

    深度剖析java内存模型

    本地内存实际上是不存在的,它是一个抽象概念,涵盖了缓存、写缓冲区、寄存器以及编译器优化等。 在Java内存模型中,线程之间的通信需要经过两个步骤:首先,一个线程将更新过的共享变量从本地内存刷新到主内存;...

    java+redis+秒杀项目实战.zip

    在本Java实战项目中,我们将探索如何利用Java技术和Redis缓存系统来构建一个高并发的秒杀系统。这个项目的核心目标是设计一个能够处理大量用户同时参与秒杀活动的平台,确保系统的稳定性和数据的一致性。以下是项目...

    elecfans.com-Java网络编程与分布式计算

    2. Executor框架:Java并发包中的ExecutorService和ThreadPoolExecutor提供了线程池管理,可以更高效地管理和控制并发任务。 四、分布式计算原理 1. RMI(Remote Method Invocation):Java RMI允许对象在不同的JVM...

    Java并发编程ppt.rar

    Java并发编程是软件开发中的一个核心领域,尤其是在服务器端应用和多核处理器系统中,它的重要性日益凸显。这个“Java并发编程ppt”压缩包文件很可能包含了一套详细的讲解材料,帮助学习者理解并掌握Java环境下的多...

    java经典代码

    例如,单例模式用于保证一个类只有一个实例,常用于配置管理或缓存服务;工厂模式则用于创建对象,提供了一种封装对象创建过程的方式;而观察者模式则用于对象间的事件通知,实现了发布-订阅模式。 在数据访问层,...

    《Java技术指南2019》

    在并发编程方面,书中详细讨论了Java中的并发包,如java.util.concurrent中的各种并发工具类和接口,以及如何设计和使用线程池,还有并发编程中可能遇到的死锁问题和解决方案。此外,本篇还涉及了CAS、乐观锁与悲观...

    Java多线程实例图形版

    此外,我们还可以利用Java并发包(java.util.concurrent)中的其他工具类,如CyclicBarrier(回环栅栏)或CountDownLatch(倒计时 latch),来协调多个线程的同步行为,确保所有哲学家按照一定的顺序进行操作。...

    JAVA做的一个相册集数据库

    在本项目中,"JAVA做的一个相册集数据库" 是一个使用Java编程语言开发的用于存储和管理相册集合的应用程序。这个应用的核心是数据库设计和管理,它可能包括了图片的上传、分类、检索以及展示等功能。让我们深入探讨...

    java 写的定时器

    `ScheduledExecutorService` 是Java并发包(`java.util.concurrent`)的一部分,提供更强大、灵活的定时任务调度功能。它支持多线程任务执行,并且可以取消任务,还可以精确控制任务执行间隔。 实现 `...

    使用Java的Memory Model实现一个简单的计数器.txt

    `AtomicInteger`是Java并发包`java.util.concurrent.atomic`中的一个类,它提供了一种原子更新整数的方法。相比于传统的同步机制如`synchronized`关键字或`java.util.concurrent.locks.Lock`接口,`AtomicInteger`...

    框架源码 API JAVA

    在IT行业中,深入理解框架的源码是提升技术能力的重要步骤,特别是对于Java开发者来...所以,对于每一个致力于提升自身技术水平的Java开发者来说,深入研究"框架源码 API JAVA"都是一个值得投入时间和精力的宝贵过程。

Global site tag (gtag.js) - Google Analytics