Java緩存池代碼實(shí)例詳解
這篇實(shí)例中有四個(gè)類,分別為
CacheItem 緩存實(shí)體類
CachePool 緩存池
Student 學(xué)生實(shí)體類
MainTest 主測試類
其中,緩存實(shí)體類CacheItem 中存放管理學(xué)生實(shí)體對象Student ,緩存實(shí)體類CacheItem 存放在緩存池CachePool 中,MainTest 主要負(fù)責(zé)整體的測試工作。
緩存實(shí)體類
package com.paic.zhangqi.cache; import java.util.Date; /** * 緩存實(shí)體 * @author ZHANGQI947 */ public class CacheItem { // 創(chuàng)建緩存時(shí)間 private Date createTime = new Date(); // 緩存期滿時(shí)間 private long expireTime = 1; // 緩存實(shí)體 private Object entity; public CacheItem(Object obj, long expires) { this.entity = obj; this.expireTime = expires; } // 判斷緩存是否超時(shí) 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 { // 緩存池唯一實(shí)例 private static CachePool instance; // 緩存Map private static Map<String, Object> cacheItems; private CachePool() { cacheItems = new HashMap<String, Object>(); } /** * 獲取唯一的實(shí)例 * @return instance */ public synchronized static CachePool getInstance() { if (instance == null) { instance = new CachePool(); } return instance; } /** * 清除所有的Item緩存 */ public synchronized void clearAllItems() { cacheItems.clear(); } /** * 獲取緩存實(shí)例 * @param name 緩存名稱 * @return 緩存實(shí)例 */ 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 實(shí)例對象 * @param expires 超時(shí)時(shí)長 */ 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); } /** * 移除緩存數(shù)據(jù) * @param name */ public synchronized void removeCacheItem(String name) { if (!cacheItems.containsKey(name)) { return ; } cacheItems.remove(name); } /** * 獲取緩存數(shù)據(jù)的數(shù)量 * @return */ public int getSize() { return cacheItems.size(); } }
學(xué)生類Student
package com.paic.zhangqi.cache; /** * 學(xué)生類 * @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); // 設(shè)置線程休眠,其中002對象會超時(shí) Thread.sleep(200); Student stu001 = (Student) cachePool.getCacheItem("001"); if (null != stu001) { System.out.println(stu001.getName()); } // 由于超時(shí),這里取出的002對象為null Student stu002 = (Student) cachePool.getCacheItem("002"); if (null != stu002) { System.out.println(stu002.getName()); } // 獲取打印緩存池中對象數(shù)量 int cacheSize = cachePool.getSize(); System.out.println(cacheSize); // 刪除對象002 cachePool.removeCacheItem("002"); // 打印緩存池?cái)?shù)量 cacheSize = cachePool.getSize(); System.out.println(cacheSize); } }
測試結(jié)果
l1
4
3
希望本篇文章內(nèi)容對您有所幫助
相關(guān)文章
Elasticsearch QueryBuilder簡單查詢實(shí)現(xiàn)解析
這篇文章主要介紹了Elasticsearch QueryBuilder簡單查詢實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08解析java基本數(shù)據(jù)類型傳遞與引用傳遞區(qū)別
這篇文章主要介紹了java基本數(shù)據(jù)類型傳遞與引用傳遞區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Java并發(fā)源碼分析ConcurrentHashMap線程集合
這篇文章主要為大家介紹了Java并發(fā)源碼分析ConcurrentHashMap線程集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Java零基礎(chǔ)教程之Windows下安裝、啟動Tomcat服務(wù)器方法圖解(免安裝版)
這篇文章主要介紹了Windows系統(tǒng)下安裝、啟動、注冊服務(wù)、停止 Tomcat操作的所有方法,本文通過圖文并茂的方式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-09-09java實(shí)現(xiàn)線程調(diào)度器和時(shí)間分片
線程調(diào)度器和時(shí)間分片是多線程編程和操作系統(tǒng)設(shè)計(jì)中的核心概念,本文主要介紹了java實(shí)現(xiàn)線程調(diào)度器和時(shí)間分片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10JAVA代碼設(shè)置selector不同狀態(tài)下的背景顏色
這篇文章主要介紹了JAVA代碼設(shè)置selector不同狀態(tài)下的背景顏色,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05