這篇實例中有四個類,分別為
CacheItem 緩存實體類
CachePool 緩存池
Student 學生實體類
MainTest 主測試類
其中,緩存實體類CacheItem 中存放管理學生實體對象Student ,緩存實體類CacheItem 存放在緩存池CachePool 中,MainTest 主要負責整體的測試工作。
緩存實體類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
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