首页 > 编程语言 >java 并发包写的一个缓存系统

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

时间:2023-03-27 20:31:43浏览次数:39  
标签:rwLock 缓存 java Object return 发包 key obj


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 ;
	}
	
	
	

}

 

标签:rwLock,缓存,java,Object,return,发包,key,obj
From: https://blog.51cto.com/u_16034393/6153204

相关文章

  • MD5Code.java
    MD5Code.javajava技术篇2009-03-1417:09:05阅读14评论0字号:大中小订阅packageorg.lxh.myzngt.util;publicclassMD5Code{/**下面这些S11-S44实际......
  • Java注解与反射
    注解(Annotation)注解Annotation是JDK5.0引入的一种注释机制Annotation的作用:不是程序本身,可以对程序作出解释可以被其他程序(比如:编译器等)读取Annotation的作......
  • Javascript绝句欣赏
     1.取整同时转成数值型:’10.567890′|0//结果:10’10.567890′^0//结果:10-2.23456789|0//结果:-2~~-2.23456789//结果:-2 2.日期转数值:vard=+ne......
  • JavaScript 压缩 加密 解密
     代码: <!DOCTYPEHTMLPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.or......
  • JavaScript 触发click事件 兼容FireFox,IE 和 Chrome
    解决了火狐下无法触发click事件的问题 <scriptlanguage="javascript"> functiontest2(name) { if(document.all) { document.getElementById(name).click(); ......
  • 系统化学习前端之JavaScript(BOM)
    前言DOM提供了JavaScript操作页面的API,BOM提供了JavaScript操作浏览器的API。BOMBOM浏览器对象模型,BOM的核心只有一个window对象。window对象在JavaScrip......
  • Java基础必须会的!
    由于此文章是从本人笔记上截取,可能存在格式不正确的情况,尚且谅解,另外把一些链接也放了进去,还请大家仔细看。面向对象概念?(1)概述:面向对象是相对于面向过程而言的,面向过程强......
  • Java 方法
    方法Java方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用一个方法只完成......
  • Java面试题(三)
    List接口有什么特点?顺序存储、可以有重复值 Set接口有什么特点?无需存储、不能有重复值 ArrayList与LinkedList有什么区别?ArrayList与LinkedList都实现了List接口......
  • rocketmq 报错ERROR: Please set the JAVA_HOME variable in your environment, We ne
    以下命令全部按顺序执行unlink/usr/bin/javacunlink/usr/bin/jarunlink/bin/java ln-s/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/bin/j......