之前只是听说过缓存池,也没有具体的接触到,今天做项目忽然想到了用缓存池,就花了一上午的时间研究了下缓存池的原理,并实现了基本的缓存池功能。

/**

* 缓存池

* @author xiaoquan

* @create 2015年3月13日 上午10:32:13

* @see

*/

public class CachePool {

private static CachePool instance;//缓存池唯一实例

private static Map cacheItems;//缓存Map

private CachePool(){

cacheItems = new HashMap();

}

/**

* 得到唯一实例

* @return

*/

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){

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

}

public synchronized void putCacheItem(String name,Object obj){

putCacheItem(name,obj,-1);

}

/**

* 移除缓存数据

* @param name

*/

public synchronized void removeCacheItem(String name){

if(!cacheItems.containsKey(name)){

return;

}

cacheItems.remove(name);

}

/**

* 获取缓存数据的数量

* @return

*/

public int getSize(){

return cacheItems.size();

}

}

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

}

/**

* 省略getter、setter方法

*/

}

java清除缓存池_Java 缓存池(使用Map实现)相关推荐

  1. java线程不执行_java线程池,阿里为什么不允许使用Executors?

    带着问题 阿里Java代码规范为什么不允许使用Executors快速创建线程池? 下面的代码输出是什么? ThreadPoolExecutor executor = new ThreadPoolExe ...

  2. java线程池_Java 线程池 8 大拒绝策略,面试必问!

    点击上方 Java后端,选择设为星标 技术博文,及时送达 前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的 ...

  3. java缓存技术_java缓存技术

    最近在做java缓存,了解了一下. 以下仅是对map对方式讨论.没有对点阵图阵讨论. 作缓存要做以下2点: 1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数 ...

  4. java 10个线程_Java线程池创建10个线程

    Q1:在Java并发编程中,如何扩展和优化线程池? 在java中多线程并不陌生,在一定的范围内,多线程数量的增加会明显提升整个系统的吞吐性能,但是线程本身会极大的耗费内存空间,线程的频繁创建和回收也极 ...

  5. java清除浏览器记录_java – 如何在Selenium测试中清除浏览器缓存

    我正在使用WebDriver运行我的Selenium测试.我正在用一些循环重复测试,所以现在我想在JAVA中开始新的测试之前清除缓存. @Test public void ffAndIe() thro ...

  6. java缓存研究_JAVA缓存研究之剖析Jive的缓存机制内容是什么呢?

    Jive是一个广受欢迎的开放源码的论坛项目,虽然推出了很多年,但至今很多Java程序员还对它津津乐道.从框架结构上看,它采用了很多设计模式,如Factory模式.Proxy模式.Decorator模式 ...

  7. java io密集型任务_Java线程池讲解——针对IO密集型任务

    sap java开发技术详解&mdash基础 94.01元 (需用券) 去购买 > 针对 IO 密集型的任务,我们可以针对原本的线程池做一些改造,从而可以提高任务的处理效率. 基本 在阿 ...

  8. java开源对象池_JAVA 对象池

    GenericObjectPool利用一个org.apache.commons.collections.CursorableLinkedList对象来保存对象池里的对象.这种对象池的特色是: 可以设定 ...

  9. java callable 线程池_JAVA 线程池之Callable返回结果

    本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...

最新文章

  1. NFS文件系统详解以及安全设置
  2. 机器人学会对自己下手了,螺丝松了自己拧
  3. Spring教程--入门程序
  4. WebIDE Initialization process
  5. Linux下的parted工具的使用 GPT分区安装系统
  6. redis 安装简介
  7. [转载] python float()
  8. 商业洞察力_正在进行的寻求洞察力和远见卓识
  9. 中国游戏的未来在哪里 - 游戏行业20年历史观察及趋势分析
  10. 运维面试题(1024水篇)
  11. 阴阳师服务器维护稍后,《阴阳师》11月7日更新维护到几点 暂时无法进入服务器进行游戏...
  12. 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统
  13. ZBrush笔刷整理大合集
  14. 绘制森林资源图的工具介绍
  15. jda 沃尔玛_如何通过沃尔玛应用程序的“储蓄守望者”省钱
  16. 大促活动前团购系统流量预算和容量评估
  17. PyQt5之QGraphics 008 QGraphicsItem四连杆机构动画
  18. 安装串口方法cp2102 usb to uart
  19. 药店管理系统(C语言课程设计)(3月1日—3月8日)
  20. OpenGL绘制罗纳尔多三维模型-Assimp库

热门文章

  1. JavaScript获取当前月的第一天和最后一天日期
  2. sql同时修改两个表的数据_如何用SQL做数据透视表?
  3. Halcon——使用标定板标定像素当量
  4. 《学习OpenCV3》第10章 滤波与卷积
  5. 洛谷P3261 [JLOI2015]城池攻占(左偏树)
  6. Android 爱心万花筒简单实现
  7. 从Discuz迁移帐号密码到NodeBB
  8. Openresty 学习笔记(三)扩展库之neturl
  9. Pycharm 2018 1.2版本 Mac注册码激活码
  10. 企业级数仓构建项目一-大数据Week12-DAY1-企业级数仓构建项目一