这篇实例中有四个类,分别为

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
希望本篇文章内容对您有所帮助
# Java缓存池代码实例
# Java缓存代码实例
# Java缓存
# Java本地缓存的实现代码
# Java中LocalCache本地缓存实现代码
# Java客户端利用Jedis操作redis缓存示例代码
# java中对Redis的缓存进行操作的示例代码
# Java代码读取文件缓存问题解决
# Java基于LoadingCache实现本地缓存的示例代码
# java性能优化之代码缓存优化
# 实体类
# 池中
# 放在
# 中有
# 分别为
# 这篇
# 对您
# 时长
# 移除
# amp
# return
# getTime
# void
# getCreateTime
# gt
# entity
# Object
# expireTime
# obj
# isExpired
相关文章:
重庆网站制作公司哪家好,重庆中考招生办官方网站?
如何快速上传自定义模板至建站之星?
建站主机SSH密钥生成步骤及常见问题解答?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
网站制作难吗安全吗,做一个网站需要多久时间?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何快速选择适合个人网站的云服务器配置?
Swift开发中switch语句值绑定模式
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站之星如何修改网站生成路径?
如何快速搭建高效香港服务器网站?
网站制作员失业,怎样查看自己网站的注册者?
如何选择适合PHP云建站的开源框架?
建站之星与建站宝盒如何选择最佳方案?
潮流网站制作头像软件下载,适合母子的网名有哪些?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
在线制作视频网站免费,都有哪些好的动漫网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
如何用景安虚拟主机手机版绑定域名建站?
盐城做公司网站,江苏电子版退休证办理流程?
如何选择高效稳定的ISP建站解决方案?
建站之星伪静态规则如何正确配置?
学校为何禁止电信移动建设网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何登录建站主机?访问步骤全解析
nginx修改上传文件大小限制的方法
网站企业制作流程,用什么语言做企业网站比较好?
详解jQuery中基本的动画方法
视频网站app制作软件,有什么好的视频聊天网站或者软件?
音乐网站服务器如何优化API响应速度?
如何快速生成橙子建站落地页链接?
如何在宝塔面板中修改默认建站目录?
如何用花生壳三步快速搭建专属网站?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
网站app免费制作软件,能免费看各大网站视频的手机app?
建站之星代理费用多少?最新价格详情介绍
建站之星如何助力企业快速打造五合一网站?
如何高效配置香港服务器实现快速建站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何在搬瓦工VPS快速搭建网站?
如何用IIS7快速搭建并优化网站站点?
网站制作需要会哪些技术,建立一个网站要花费多少?
c# await 一个已经完成的Task会发生什么
如何用PHP快速搭建CMS系统?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
高端云建站费用究竟需要多少预算?
*请认真填写需求信息,我们会在24小时内与您取得联系。