package com.tb.test;

import java.util.HashMap;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.locks.ReadWriteLock;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class CachedTest {

// 第一种方法 用hashmap存 然后加锁get方法

// private HashMap cached = new HashMap();

//

// public synchronized Object get(String user){

//Object value=cached.get(user);

// if( value== null){

//

// value ="sss"; //实际上是从数据库中读取

// cached.put(user, value);

// }

//

// return value;

// }

// 第二种方法是用ConcurrentHashMap

// private ConcurrentHashMap cached= new

// ConcurrentHashMap();

//

// public Object get(String user){

//Object value=cached.get(user);

// if(value == null){

//

// value ="sss"; //实际上是从数据库中读取

// cached.put(user, value);

// }

//

// return value;

//

//

// }

// 第三种 用hashmap 加读写锁

private HashMap cached = new HashMap();

private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

public Object get(String user) {

readWriteLock.readLock().lock();

Object value = null;

try {

value = cached.get(user);

if ( value == null) {

readWriteLock.readLock().unlock();

readWriteLock.writeLock().lock();

try {

if(value == null){

value = "aa"; // 实际上从数据库读取

cached.put(user, value);

}

} finally {

readWriteLock.writeLock().unlock();

}

readWriteLock.readLock().lock();

}

} finally {

readWriteLock.readLock().unlock();

}

return value;

}

}

java简单实现一个缓存_java简单实现缓存的三种方法相关推荐

  1. java中三种方法_Java文件I/O的三种方法

    Java文件I/O的三种方法 RandomAccessFile是不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(Data ...

  2. java当前时间_java 获取当前时间的三种方法

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...

  3. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  4. java json的使用方法_JAVA编写JSON常用的三种方法

    JAVA编写JSON常用的三种方法 Szx • 2019 年 11 月 15 日 1.jsonlib需要引入的包也多,代码也相对多一些. 2.Gson:谷歌的 3.FastJson:阿里巴巴的,这几个 ...

  5. java 终止方法_Java中终止线程的三种方法

    Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...

  6. java 取名字_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...

  7. java i o中文版_Java文件I/O的三种方法

    摘要:之前在面试中被问到过两次Java中文件读入输出怎么写,当时只记得一个大概,没有办法很清晰的说出一个条理,今天特地看出总结了一下这方面的内容,想要写出来给大家分享.首先文件读入输出流常用有三种:F ...

  8. java web登录状态保持_java web用于保持状态的4种方法

    方法一:网址重写 通过在url地址后面添加若干的token作为查询字符串来实现.token的值一般为 键=值 url?key1=value1&key2=value2&...&k ...

  9. java中break什么意思_Java中break的第三种用法说明

    在Java中,break语句有三种用法,第一种是用于终止switch语句中的语句序列,第二种是用于退出循环,然而第三种是用作goto语句的"文明"形式! 我们知道,goto语句会破 ...

  10. java数组怎么全部初始化_Java数组初始化,这三种方式有什么区别?

    首先因为数组初始化要使用的时候必须确定数组的长度,也就是说数组的长度是不可变的. 在JAVA中创建数组有两种方式 : (1)静态创建 如 Object[] arr1 = {"a", ...

最新文章

  1. TCP的协议特点(对于《Linux高性能服务器编程》的部分摘录以及自己的部分见解)
  2. orb-slam评价
  3. 百度地图API使用之实现定位
  4. ant指定servlet版本_Spring工具 - AntPathMatcherUrlPathHelper(针对URL进行处理)
  5. bash 2_quantize.sh遇到错误2_quantize.sh: line 7: 29380 Segmentation fault解决方法
  6. python 预测算法_Python 与金融数据使用机器学习算法预测交易策略
  7. 【模拟】Ground Defense
  8. 4-[函数]- 独立功能的代码块
  9. 滴滴、小米启动造车,特斯拉的护城河还能守多久?
  10. Python ln_虚拟机中单机Spark (Python版)安装
  11. aes没有密码能解密吗_如果人体基因密码被破译,人类平均寿命能提高到1000岁吗?...
  12. excel最常用的八个函数
  13. 成功破解电信限制路由器方法
  14. 学生电影网页设计作品 影视主题学生网页制作 简单网页设计作业 静态影视介绍网页模板
  15. win10计算机初始输入法,Win10默认输入法怎么设置?
  16. AndroidStudio软件用法详细说明
  17. 如何高效的学习高等数学
  18. 直线相交的交点(Line-Line Intersection)
  19. 小米项目实习踩坑集合
  20. 【英语词组】恋恋不忘Day 3-4

热门文章

  1. 黑马程序员最新Python教程——第一阶段(3)第二阶段(1)
  2. Android作业四
  3. java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收
  4. python处理access数据库教程_python是如何操作access数据库的,python 数据清洗
  5. 数据结构课程设计---图书管理系统
  6. java web程序设计郭_Java Web程序设计-(第2版)
  7. 计算机存储器的分类图片,存储器分类及各自特点有哪些
  8. 《自己动手写操作系统》(一)
  9. eoLinker-API_Shop_知识类API调用的代码示例合集:驾考题库、ISBN书号查询、万年历查询等...
  10. [Excel图表实战技巧精粹].Excel.Home.扫描版 百度云