- 浏览: 118558 次
- 性别:
- 来自: 深圳
文章分类
说明: 该缓存结构可能存在多线程安全问题,参考ConcurrentHashMap线程安全结构,做修改
package cache; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; public class CacheMgr { private static Map cacheMap = new HashMap(); private static Map cacheConfMap = new HashMap(); private CacheMgr(){ } private static CacheMgr cm = null; //单例 public static CacheMgr getInstance(){ if (cm == null) { synchronized(CacheMgr.class){ if(cm == null){ cm = new CacheMgr(); Thread t = new ClearCache(); t.start(); } } } return cm; } /** * 增加缓存 */ public boolean addCache(Object key,Object value,CacheConfModel ccm){ boolean flag = false; cacheMap.put(key, value); cacheConfMap.put(key, ccm); System.out.println("now addcache=="+cacheMap.size()); return true; } public boolean removeCache(Object key){ cacheMap.remove(key); cacheConfMap.remove(key); System.out.println("now removeCache=="+cacheMap.size()); return true; } public static class ClearCache extends Thread{ public void run(){ while(true){ Set tempSet = new HashSet(); Set set = cacheConfMap.keySet(); Iterator it = set.iterator(); while(it.hasNext()){ Object key = it.next(); CacheConfModel ccm = (CacheConfModel)cacheConfMap.get(key); if(!ccm.isForever()){ if((new Date().getTime()-ccm.getBeginTime())>= ccm.getDurableTime()*60*1000){ //可以清除,先记录下来 tempSet.add(key); } } } //真正清除 Iterator tempIt = tempSet.iterator(); while(tempIt.hasNext()){ Object key = tempIt.next(); cacheMap.remove(key); cacheConfMap.remove(key); } System.out.println("now thread================>"+cacheMap.size()); //休息 try { Thread.sleep(60*1000L); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } class CacheConfModel implements java.io.Serializable{ private long beginTime; private boolean isForever = false; private int durableTime; public long getBeginTime() { return beginTime; } public void setBeginTime(long beginTime) { this.beginTime = beginTime; } public boolean isForever() { return isForever; } public void setForever(boolean isForever) { this.isForever = isForever; } public int getDurableTime() { return durableTime; } public void setDurableTime(int durableTime) { this.durableTime = durableTime; } }
发表评论
-
Java技术——你真的了解String类的intern()方法吗
2017-08-27 13:01 516http://blog.csdn.net/seu_calvin ... -
java的集合操作(交集、并集、差集)
2015-12-08 16:33 860/** * 求ls对ls2的差集,即ls中有, ... -
Deadlock found when trying to get lock; try restarting transaction
2015-12-02 20:13 1124批量插入数据遇到异常 this.getJdbcTemplate ... -
Spring3 MVC请求参数获取的几种方法
2015-11-20 14:33 602参考文档 http://www.cnblogs.com/le ... -
linux下安装jdk1.7
2015-07-06 12:20 442jdk下路径 http://www.oracle.com/te ... -
Java日期格式化常用方法
2014-06-21 21:03 532参考文档: http://www.cnblogs.com/ ... -
JAVA图片压缩
2014-04-23 22:26 610可以将像素高的图片转成像素低的图片,同时图片清晰度会降低 j ... -
JAVA的字符串拼接与性能
2014-01-17 15:33 460因此,在不考虑线程安全和同步的情况下,为了获得最高的性能,我们 ... -
MS Sql Server 中主从库的配置和使用介绍-数据库备份
2013-11-14 11:52 1170博客链接地址: http://technet.microsof ... -
JAVA时间类SimpleDateFormat,Calendar,Date
2013-05-29 10:00 1118package javaTest; import j ... -
植物大战僵尸JAVA版
2013-05-21 10:40 937http://www.oschina.net/code/sni ... -
JDBC数据库访问操作,支持JSON格式
2013-05-21 10:29 1402开源中国: http://www.oschina.net/c ... -
java与JavaScript 将字符串每隔三位添加一个逗号(左往右、右往左)
2013-05-09 17:03 5016在平时处理现金金额显示时,我们经常会遇到这样的问题:从个位开始 ... -
JAVA多线程死锁程序Demo
2013-05-01 21:01 1042package thread; /** * JA ... -
JAVA多线程的5种状态
2013-05-01 18:31 1043JAVA多线程的五种状态图解 -
JAVA单例设计模式Single--饿汉式-懒汉式-多线程中的设计
2013-05-01 18:25 1037/** * 单例设计模式--懒汉式--饿汉式 * ... -
JAVA嵌套循环的break,continue,return
2013-04-22 22:25 3285package loop; public class ... -
JAVA的SuppressWarnings
2013-04-20 15:53 770有时候使用Myeclipse总是出现 黄色的警告,看起来不爽, ...
相关推荐
在 Java 中,缓存机制的实现可以通过各种方式,例如使用 HashMap、TreeMap、LinkedHashMap 等数据结构来存储缓存对象。下面是一个简单的缓存管理器的实现: CacheManager 类的实现: CacheManager 类是一个简单...
Java实现简单LRU缓存机制的方法 Java实现简单LRU缓存机制的方法是指通过Java语言实现的一种缓存机制,该机制可以根据最近最少使用的原则淘汰缓存中的数据。缓存机制的实现主要是通过哈希表和双向链表来实现的。 ...
它很可能包含了一个简单的Java缓存实现,可能使用了HashMap或者其他自定义的数据结构来模拟缓存操作。这样的实例通常会包括以下组件: 1. **缓存接口**:定义缓存的基本操作,如put、get、remove和clear。 2. **...
ViewHolder是一个简单的Java类,用于存储每个item View中的子View引用。通过持有这些引用,避免了在getView()方法中频繁查找子View的操作,提高了性能。在适配器的getView()方法中,首先检查convertView是否为null,...
参考链接提供的CSDN博客文章《[Spring简单缓存实现](http://blog.csdn.net/maoyeqiu/article/details/50238035)》中,作者详细介绍了如何在Spring项目中实现缓存,包括配置、注解使用以及注意事项,是一个很好的学习...
### Android LRUCache机制详解 #### 一、LRUCache简介 在Android开发过程中,缓存技术是一项重要的优化手段,可以显著提升应用性能并改善用户体验。LRUCache(Least Recently Used Cache,最近最少使用缓存)是一种...
Java内置的缓存机制主要体现在Java 8及后续版本的`java.util.concurrent.ConcurrentHashMap`类的`computeIfAbsent()`和`putIfAbsent()`方法上,这些方法可以在不锁定整个集合的情况下进行原子操作,适用于简单的缓存...
本实践项目是关于如何使用线程(Thread)和定时器(Timer)来实现一个简单的缓存同步机制。我们将探讨以下几个关键知识点: 1. **线程基础**: - 在Java中,`Thread`类是线程的基类,通过继承或实现`Runnable`接口...
实现分页缓存的关键在于设计一个高效且可扩展的缓存机制。Java中常用的缓存库有Ehcache、Guava Cache以及Spring Data Redis等。这里我们以Ehcache为例,讨论如何构建一个简单的分页缓存系统。 1. **Ehcache配置**:...
下面详细介绍如何使用 Java 实现一个简单的 LRU 缓存机制。 ##### 1. 定义双向链表节点类 `Node` ```java class Node { int key; int value; Node prev; Node next; public Node(int key, int value) { ...
理解这些缓存机制的原理和实践,对于优化Java应用程序性能至关重要。开发者可以根据具体需求选择合适的缓存解决方案,同时注意考虑并发控制、内存管理和数据过期策略等因素,确保系统的稳定性和效率。在实际工作中,...
常见的数据库缓存机制包括MySQL的InnoDB Buffer Pool,Oracle的Shared Pool等。 在Java世界里,最常用的数据库缓存解决方案有以下几种: 1. **Redis**:一个开源的、支持网络、基于内存、可持久化的键值对数据库。...
下面是一个简单的字符串缓存类实现示例,我们将称之为`StringCache`: ```java public class StringCache { private static final int CAPACITY = 100; // 缓存容量 private Map, String> cache = new HashMap...
- `threadKeys` 是一个ArrayList,存储了当前处于线程更新中的key,这可能是一个并发控制机制,确保同一时刻只有一个线程在更新特定的缓存项。 `CacheOperation` 类还实现了单例模式,确保全局只有一个实例存在,...
缓存机制在提高系统响应速度方面发挥着重要作用。在高并发情况下,使用缓存能够显著降低对数据库的压力,进而提高整个系统的性能。具体而言,当用户首次访问某个数据时,系统会从数据库中获取数据并将这些数据存储在...
总的来说,Java中的缓存机制可以通过多种方式实现,包括但不限于简单的HashMap、使用并发容器、或者集成专业的缓存服务。理解这些缓存机制并选择合适的实现方式,对于优化Java应用的性能至关重要。
ShiftOne Object Cache提供了一种基础的Java对象缓存机制,实现包括FIFO、LRU和LFU在内的多种缓存策略,允许开发者调整最大元素数量和生存时间。 WhirlyCache是一个内存对象缓存,强调速度和可配置性,旨在通过缓存...
【Java缓存工具 SimpleCache】是一个实用的Java编程示例,它展示了如何在应用程序中实现一个简单的缓存机制。在软件开发中,缓存是一种优化技术,用于存储频繁访问的数据,以便快速检索,减少对主数据库或其他计算...