Java愛好者

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

          一個簡單的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) {
          ??????????????? // 當前時間在設(shè)定的過期時間之前,表示還沒有過期。
          ??????????????? // 如果還沒過期,那么就返回。
          ??????????????? 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 閱讀(1277) 評論(1)  編輯  收藏

          評論

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

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

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 江都市| 左云县| 绍兴市| 平山县| 郸城县| 岗巴县| 罗甸县| 钟山县| 揭阳市| 纳雍县| 长乐市| 孝昌县| 泰州市| 天水市| 六盘水市| 宣城市| 新竹市| 湖南省| 积石山| 平邑县| 望谟县| 徐闻县| 沾益县| 化德县| 吴江市| 马山县| 都匀市| 定西市| 镇沅| 赞皇县| 交城县| 盘山县| 肇州县| 大安市| 兰溪市| 崇礼县| 崇文区| 南华县| 上高县| 左权县| 雷波县|