Java缓存池代码实例详解
作者:蜗牛- 发布时间:2021-07-23 07:40:39
标签:java,缓存池
这篇实例中有四个类,分别为
CacheItem 缓存实体类
CachePool 缓存池
Student 学生实体类
MainTest 主测试类
其中,缓存实体类CacheItem 中存放管理学生实体对象Student ,缓存实体类CacheItem 存放在缓存池CachePool 中,MainTest 主要负责整体的测试工作。
缓存实体类
package com.paic.zhangqi.cache;
import java.util.Date;
/**
* 缓存实体
* @author ZHANGQI947
*/
public class CacheItem {
// 创建缓存时间
private Date createTime = new Date();
// 缓存期满时间
private long expireTime = 1;
// 缓存实体
private Object entity;
public CacheItem(Object obj, long expires) {
this.entity = obj;
this.expireTime = expires;
}
// 判断缓存是否超时
public boolean isExpired() {
return (expireTime != -1 && new Date().getTime() - createTime.getTime() > expireTime);
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Object getEntity() {
return entity;
}
public void setEntity(Object entity) {
this.entity = entity;
}
public long getExpireTime() {
return expireTime;
}
public void setExpireTime(long expireTime) {
this.expireTime = expireTime;
}
}
缓存池CachePool
package com.paic.zhangqi.cache;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 缓存池
* @author Administrator
*/
public class CachePool {
// 缓存池唯一实例
private static CachePool instance;
// 缓存Map
private static Map<String, Object> cacheItems;
private CachePool() {
cacheItems = new HashMap<String, Object>();
}
/**
* 获取唯一的实例
* @return instance
*/
public synchronized static CachePool getInstance() {
if (instance == null) {
instance = new CachePool();
}
return instance;
}
/**
* 清除所有的Item缓存
*/
public synchronized void clearAllItems() {
cacheItems.clear();
}
/**
* 获取缓存实例
* @param name 缓存名称
* @return 缓存实例
*/
public synchronized Object getCacheItem(String name) {
if (!cacheItems.containsKey(name)) {
return null;
}
CacheItem cacheItem = (CacheItem) cacheItems.get(name);
if (cacheItem.isExpired()) {
return null;
}
return cacheItem.getEntity();
}
/**
* 存放缓存信息
* @param name 名称
* @param obj 实例对象
* @param expires 超时时长
*/
public synchronized void putCacheItem(String name, Object obj, long expires) {
// 判断该对象是否在在缓存池,不在直接put
if (!cacheItems.containsKey(name)) {
cacheItems.put(name, new CacheItem(obj, expires));
}
// 获取缓存池中对象,更新对象信息
CacheItem cacheItem = (CacheItem) cacheItems.get(name);
cacheItem.setCreateTime(new Date());
cacheItem.setEntity(obj);
cacheItem.setExpireTime(expires);
}
/**
* 移除缓存数据
* @param name
*/
public synchronized void removeCacheItem(String name) {
if (!cacheItems.containsKey(name)) {
return ;
}
cacheItems.remove(name);
}
/**
* 获取缓存数据的数量
* @return
*/
public int getSize() {
return cacheItems.size();
}
}
学生类Student
package com.paic.zhangqi.cache;
/**
* 学生类
* @author Administrator
*/
public class Student {
private String name;
private String id;
private int age;
private int sal;
public Student() {
}
public Student(String name, String id, int age, int sal) {
this.name = name;
this.id = id;
this.age = age;
this.sal = sal;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
}
主测试类MainTest
package com.paic.zhangqi.cache;
/**
* 主测试类
* @author ZHANGQI947
*/
public class MainTest {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// 获取缓存池
CachePool cachePool = CachePool.getInstance();
Student stu1 = new Student("l1", "stu001", 25, 40);
Student stu2 = new Student("l2", "stu002", 25, 40);
Student stu3 = new Student("l3", "stu003", 25, 40);
Student stu4 = new Student("l4", "stu004", 25, 40);
cachePool.putCacheItem("001", stu1, 122222);
cachePool.putCacheItem("002", stu2, 10);
cachePool.putCacheItem("003", stu3, 360002);
cachePool.putCacheItem("004", stu4, 1222222);
// 设置线程休眠,其中002对象会超时
Thread.sleep(200);
Student stu001 = (Student) cachePool.getCacheItem("001");
if (null != stu001) {
System.out.println(stu001.getName());
}
// 由于超时,这里取出的002对象为null
Student stu002 = (Student) cachePool.getCacheItem("002");
if (null != stu002) {
System.out.println(stu002.getName());
}
// 获取打印缓存池中对象数量
int cacheSize = cachePool.getSize();
System.out.println(cacheSize);
// 删除对象002
cachePool.removeCacheItem("002");
// 打印缓存池数量
cacheSize = cachePool.getSize();
System.out.println(cacheSize);
}
}
测试结果
l1
4
3
希望本篇文章内容对您有所帮助
来源:http://blog.csdn.net/magi1201/article/details/60964107


猜你喜欢
- 引言在学习Java过程中,排序sort是我们常用的功能;在Java里,数组有Arrays.sort()可以排序,集合则是Collection
- 1、首先导入solrj需要的的架包2、需要注意的是低版本是solr是使用SolrServer进行URL实例的,5.0之后已经使用SolrCl
- utf-8转unicode public static String utf8ToUnicode(String inStr) {  
- 本文实例讲述了java实现递归文件列表的方法。分享给大家供大家参考。具体如下:FileListing.java如下:import java.
- AutoRestEvent 类用于从一个线程向另一个线程发送通知。微软文档是这样介绍的:表示线程同步事件在一个等待线程释放后收到信号时自动重
- 一、前言java是一门跨硬件平台的面向对象高级编程语言,java程序运行在java虚拟机上(JVM),由JVM管理内存,这点是和C++最大区
- Android上使调用OpenCV 2.4.10 实现二维码区域定位(Z-xing 码),该文章主要用于笔者自己学习中的总结,暂贴出代码部分
- 获得redis所有的key-value运行结果:redis配置文件需要序列化@Bean public RedisT
- java 网络编程java.net 类 InetAddress 此类表示互联网协议 (IP) 地址。 会抛出异常 UnknownHostEx
- CamShift算法全称是“Continuously Adaptive Mean-Shift”(连续的自适应MeanShift算法),是对M
- 在Java编程过程中,我们常常会遇到比较基本类型或者对象之间的大小关系,下面我们来看看怎么去比较。源码如下:package object;c
- 使用YZMHelper帮助类即可using System;using System.Web;using System.Drawing;usi
- 1集合的概念把集合看做是一个容器,集合不是一个类,是一套集合框架,框架体系包含很多的集合类,java api提供了集合存储任意类型(基本包装
- 目录问题产生如何解决总结问题产生默认生成的flutter工程,在启动时候会白屏,设备性能越差,白屏时间越长。原生Android开发也会遇到类
- 先给大家展示下效果图,如果大家感觉不错,请参考使用方法,效果图如下所示:使用方法:录音工具类:AudioRecoderUtils.java,
- @RequestBody和@ResponseBody及Stringify()的作用首先,在项目的前后交互中json数据格式比较常用,普遍认为
- 网上很多人对设置控件的位置都使用view.setPadding(left, top, right, bottom) ,其实这玩意很差劲,它是
- 今天给大家介绍一下Java实现钢琴的小程序,程序虽小,功能挺多,支持循环播放,录音等功能,首先简单介绍下源码结构:先看看钢琴界面实现,添加相
- 问题介绍:用二维数组表示一个迷宫,设置迷宫起点和终点,输出迷宫中的一条通路实现思路:二维数组表示迷宫:0表示路且未走过、1表示墙、2表示通路
- 单纯使用GridView通用的两种给GridView 添加分割线的方法;http://stackoverflow.com/questions