Java愛好者

          一個堅定的Java愛好者,歡迎和我討論
          隨筆 - 7, 文章 - 8, 評論 - 6, 引用 - 0
          數據加載中……

          一個簡單的Cache工具類,支持多線程


          import java.util.Calendar;
          import java.util.HashMap;
          import java.util.Hashtable;

          public class CacheHelper {
          ??? public final static int default_interval_second = 20;
          ??? public static boolean?? ISDEBUG???????????????? = true;
          ??? private static HashMap? map???????????????????? = new HashMap();
          ??? private static Object?? obj???????????????????? = new Object();

          ??? public static ICache getCache(String uniquekey) {
          ??????? synchronized (obj) {
          ??????????? ICache ic = (ICache) map.get(uniquekey);
          ??????????? if (ic == null) {
          ??????????????? ic = new CacheEntity(uniquekey);
          ??????????????? map.put(uniquekey, ic);
          ??????????? }
          ??????????? return ic;
          ??????? }
          ??? }

          ??? public interface ICache {
          ??????? Object get();

          ??????? Object get(long timestamp);

          ??????? void set(Object obj);

          ??????? void set(long timestamp, Object obj);

          ??????? void clear(String regx);

          ??????? void clearAll();
          ??? }

          ??? private static class CacheEntity implements ICache {
          ??????? private Hashtable hm??????? = new Hashtable();
          ??????? private Object??? uniquekey = this;
          ??????? private long????? timestamp = Long.MIN_VALUE;

          ??????? public CacheEntity(Object uniquekey) {
          ??????????? this.uniquekey = uniquekey;
          ??????? }

          ??????? public Object get(long timestamp) {
          ??????????? if (timestamp <= this.timestamp) {
          ??????????????? // 當前時間在設定的過期時間之前,表示還沒有過期。
          ??????????????? // 如果還沒過期,那么就返回。
          ??????????????? Object obj = hm.get(uniquekey);
          ??????????????? if (ISDEBUG && obj != null) {
          ??????????????????? // 輸出日志。
          ??????????????????? System.out.println("[" + timestamp + "][Reading cache][" + uniquekey + "]...");
          ??????????????? }
          ??????????????? return obj;
          ??????????? }
          ??????????? else {
          ??????????????? // 清理垃圾。
          ??????????????? hm.remove(uniquekey);
          ??????????????? return null;
          ??????????? }
          ??????? }

          ??????? public void set(long timestamp, Object obj) {
          ??????????? this.timestamp = timestamp;
          ??????????? hm.put(uniquekey, obj);
          ??????? }

          ??????? public Object get() {
          ??????????? Calendar cal = Calendar.getInstance();
          ??????????? return get(cal.getTimeInMillis());
          ??????? }

          ??????? public void set(Object obj) {
          ??????????? Calendar cal = Calendar.getInstance();
          ??????????? cal.add(Calendar.SECOND, default_interval_second);
          ??????????? set(cal.getTimeInMillis(), obj);
          ??????? }

          ??????? public void clear(String regx) {
          ??????????? java.util.Enumeration keys = hm.keys();
          ??????????? while (keys.hasMoreElements()) {
          ??????????????? String key = (String) keys.nextElement();
          ??????????????? if (key.matches(regx)) {
          ??????????????????? hm.remove(key);
          ??????????????? }
          ??????????? }
          ??????? }

          ??????? public void clearAll() {
          ??????????? hm.clear();
          ??????? }
          ??? }
          }

          posted on 2006-08-03 09:29 JStar 閱讀(1281) 評論(1)  編輯  收藏

          評論

          # re: 一個簡單的Cache工具類,支持多線程[未登錄]  回復  更多評論   

          我覺得寫的一般
          有很多問題存在
          2009-10-09 15:56 | 新手

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 二连浩特市| 舞阳县| 肃宁县| 衡阳市| 土默特右旗| 常山县| 呼图壁县| 子洲县| 镇赉县| 东兰县| 虎林市| 勃利县| 莱州市| 徐州市| 虞城县| 普定县| 龙州县| 万宁市| 崇左市| 获嘉县| 隆安县| 信丰县| 泰和县| 澄城县| 大悟县| 牡丹江市| 松阳县| 娱乐| 华蓥市| 南昌县| 米脂县| 忻州市| 普宁市| 板桥市| 新安县| 昔阳县| 龙游县| 连城县| 巩义市| 垫江县| 丹寨县|