亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cacher.java

?? 實現(xiàn)LRU算法的Cache源代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * @(#)Cacher.java
 *
 * Copyright 2002-2002 css, Inc. All Rights Reserved.
 */
package com.dw.system.cache;

import java.io.*;
import java.util.*;

import com.dw.system.*;

/**
 * In one java vm,running a application like web server may has many bottleneck.
 * Such as access db,read file and create a complex object etc.
 * <p>
 * The <code>Cacher</code> class is a main class that in a java vm.<br/>
 * 1,all running procedure can use a general cacher.<br/> 2,in general
 * cacher,there are many sub cacher,and every one has a name. So,different
 * program mode can use different sub cacher and it can use any name to cache
 * its data withou conflict.<br/> 3,cache type:<br/> (1),CACHER_FOREVER:every
 * data object can in cache for ever until the data with the same name replace
 * it. (2),CACHER_TIMEOUT:every data object has a timeout value to be set before
 * being placed into cache.<br/> <b>in general cacher,a moniter thread is
 * always runing to detect data which is timeout and remove it from cache.</b><br/>
 * (3),CACHER_LENGTH: The cache has a limited length. For it is difficult to get
 * a object's memory usage.so the limited length is only for object number. And
 * the cache use LRU algorithm to to remove old data when a new data come into a
 * full cache. 3,The general cacher may be can automatically check java vm
 * runtime status,and can use some strategy to adjust self. For example.when
 * moniter find that java vm freeMemory/totlaMemory is small than a special
 * value,it can walk through the whole cacher and remove some data which is not
 * used for a long time. 4,刪除更改同步功能:多個進程間的刪除同步,當有一個進程對某一cache內容進行
 * 刪除或更改時,需要對其他進程中的相關cache內容進行刪除。 該功能只適合于這種使用情況:應用僅僅訪問cache中的單條內容,并且
 * 當應用發(fā)現(xiàn)cache中沒有內容時,就到其他地方獲取,并且保存到cache中。
 * 
 * 
 * @author zhijun zhu
 * @version 3.0
 * @since
 */
public class Cacher
{
	public static boolean _DEBUG = false;

	public static final short UNKNOW_INIT = 0;

	public static final short BEFORE_INIT = 1;

	public static final short DURING_INIT = 2;

	public static final short AFTER_INIT = 3;

	// (("true").equals(Configuration.getProperty("platform.release")))?false:true
	// ;
	/***************************************************************************
	 * 參數(shù)區(qū)
	 **************************************************************************/
	public static final int DEFAULT_CACHE_LENGTH = Integer.MAX_VALUE;

	/***************************************************************************
	 * 啟動區(qū)
	 **************************************************************************/
	static String SYNER_CONF_FILE = null;

	static Properties SYNER_PROP = new Properties();

	static Properties SYNER_PREFIX_PROP = new Properties();

	// static
	// {
	// File f = null;
	// FileInputStream fis = null;
	// CacherLogger.startLog();
	// try
	// {
	// SYNER_CONF_FILE = Configuration.getProperty("conf.directory") +
	// "cachersyner.conf";
	// f = new File(SYNER_CONF_FILE);
	// if (f.exists())
	// {
	// fis = new FileInputStream(f);
	// SYNER_PROP.load(fis);
	//
	// for (Enumeration en = SYNER_PROP.propertyNames();
	// en.hasMoreElements(); )
	// {
	// String cn = (String) en.nextElement();
	// if (!cn.endsWith("*"))
	// {
	// continue;
	// }
	// String val = SYNER_PROP.getProperty(cn);
	// SYNER_PREFIX_PROP.setProperty(cn.substring(0,
	// cn.length() - 1), val);
	// }
	//
	// } //end of if(f.exists())
	// }
	// catch (Throwable e)
	// {
	// //e.printStackTrace();
	// }
	// finally
	// {
	// try
	// {
	// if (fis != null)
	// {
	// fis.close();
	// }
	// }
	// catch (IOException ioe)
	// {
	// ioe.printStackTrace();
	// }
	// }
	// }

	static Hashtable allCachers = new Hashtable();

	static String DEFAULT_CACHER = "DEFAULT_CACHER";

	// static CacherSyner cacherSyn = CacherSyner.getInstance();

	public static Cacher getCacher()
	{
		return getCacher(DEFAULT_CACHER);
	}

	synchronized public static Cacher getCacher(String name)
	{
		if (name.indexOf('*') >= 0)
		{
			throw new RuntimeException("Cacher Error:Wrong name [" + name
					+ "] Cache Name Cannot Contain [*]!");
		}

		Cacher tmpc = (Cacher) allCachers.get(name);
		if (tmpc == null)
		{
			tmpc = new Cacher(name);

			String syntype = SYNER_PROP.getProperty(name);
			if (syntype == null)
			{ // may be cachename*
				for (Enumeration en = SYNER_PREFIX_PROP.propertyNames(); en
						.hasMoreElements();)
				{
					String tmps = (String) en.nextElement();
					if (name.startsWith(tmps))
					{
						syntype = SYNER_PREFIX_PROP.getProperty(tmps);
						break;
					}
				}
			}

			// if (syntype != null)
			// {
			// if ("syn_dirty".equals(syntype.toLowerCase()))
			// {
			// tmpc.setSynType(CacherSyner.SYN_DIRTY);
			// }
			// else if ("syn_change".equals(syntype.toLowerCase()))
			// {
			// tmpc.setSynType(CacherSyner.SYN_CHANGE);
			// }
			// else if ("syn_same".equals(syntype.toLowerCase()))
			// {
			// tmpc.setSynType(CacherSyner.SYN_SAME);
			// }
			// else if ("syn_same_mem".equals(syntype.toLowerCase()))
			// {
			// tmpc.setSynType(CacherSyner.SYN_SAME_MEM);
			// tmpc.sameMemInit();
			//
			// }
			// }
			allCachers.put(name, tmpc);
		}
		return tmpc;
	}

	// public static Cacher getCacher(String name, short syn)
	// {
	// Cacher tmpc = (Cacher) allCachers.get(name);
	// if (tmpc == null)
	// {
	// tmpc = new Cacher(name, syn);
	// allCachers.put(name, tmpc);
	// }
	// tmpc.setSynType(syn);
	// return tmpc;
	// }

	public static boolean isExistedCacher(String name)
	{
		return (allCachers.get(name) != null);
	}

	/**
	 * 根據(jù)前綴名得到所有相關的Cacher對象
	 * 
	 * @param pname
	 *            不能有通配符
	 */
	synchronized public static Cacher[] getCachersByPrefixName(String pname)
	{
		Vector v = new Vector();

		Enumeration en = allCachers.elements();
		Cacher tmpc = null;
		while (en.hasMoreElements())
		{
			tmpc = (Cacher) en.nextElement();
			if (tmpc.getName().startsWith(pname))
			{
				v.addElement(tmpc);
			}
		}

		int s = v.size();
		Cacher[] retcs = new Cacher[s];
		for (int i = 0; i < s; i++)
		{
			retcs[i] = (Cacher) v.elementAt(i);
		}

		return retcs;
	}

	/**
	 * @return String[] impossible to be null.
	 */
	public static String[] getAllCacherNames()
	{
		int s = allCachers.size();
		Enumeration en = allCachers.keys();
		String[] rets = new String[s];
		for (int i = 0; i < s; i++)
		{
			rets[i] = (String) en.nextElement();
		}
		return rets;
	}

	/***************************************************************************
	 * 控制區(qū)
	 **************************************************************************/
	/**
	 * 監(jiān)控線程對象
	 */
	static SoleThread monThread = null;

	static MonRunner monRunner = null;

	static long checkInterval = 60000;
	static
	{
		// monRunner = new MonRunner();
		// monThread = new SoleThread(monRunner);
		// monThread.start();
	}

	static class MonRunner implements SoleRunnable
	{
		public void release()
		{
			System.out
					.println(">>>>>Cacher MonRunner to be released because of SoleThread!!");
		}

		public void run(SoleThread st)
		{
			while (st.isSole())
			{
				try
				{
					cleanAllCacher();

					Thread.sleep(checkInterval);
				}
				catch (Exception e)
				{
					if (_DEBUG)
					{
						e.printStackTrace();
					}
				}
			}
		}

	}
	
	
	static class CleanRunner implements Runnable
	{
		public void run()
		{
			cleanAllCacher();
		}

	}

	/**
	 * 清除Cache中所有的過期數(shù)據(jù),以騰出內存
	 *
	 */
	private static void cleanAllCacher()
	{

		for (Enumeration en = allCachers.elements(); en.hasMoreElements();)
		{
			Cacher tmpch = (Cacher) en.nextElement();
			tmpch.detectExpired();
		}

	}

	static Object cleanLocker = new Object() ;
	static long lastClean = -1 ;
	/**
	 * 每次從cache中取數(shù)據(jù),或加入數(shù)據(jù),都應該調用改方法
	 * 該方法根據(jù)一定的策略,決定何時啟動清理過程
	 */
	private static void pulseClean()
	{
		if(System.currentTimeMillis()-lastClean<checkInterval)
			return ;
		
		synchronized(cleanLocker)
		{
			long cst = System.currentTimeMillis() ;
			if(cst-lastClean<checkInterval)//再次確認
				return ;
			
			lastClean = cst ;
			
			CleanRunner cr = new CleanRunner();
			Thread t = new Thread(cr,"cache-clean_runner");
			t.start();
		}
	}
	/**
	 * 設置監(jiān)控線程檢測時間間隔
	 */
	public static void setCheckInterval(long t)
	{
		checkInterval = t;
	}

	public static long getCheckInterval()
	{
		return checkInterval;
	}

	// //////////////////////////////////////////////////

	// ////////////////////
	/***************************************************************************
	 * 保存區(qū)
	 **************************************************************************/
	/**
	 * Cache的名稱
	 */
	String strCacherName;

	/**
	 * 本Cache是否同步
	 */
	// short synType = CacherSyner.SYN_NO;
	/**
	 * 
	 */
	CacherBuffer cacherBuffer = null;

	/**
	 * 
	 */
	CacherIniter initer = null;

	/**
	 * 
	 */
	short initState = UNKNOW_INIT;

	/**
	 * 
	 */
	Vector duringInitBuf = new Vector();

	private Cacher(String name)
	{
		strCacherName = name;
		cacherBuffer = new CacherBuffer();
		// initer = new CacherIniter() ;
	}

	// private Cacher(String name, short syn)
	// {
	// this(name);
	// synType = syn;
	// }

	// private void sameMemInit()
	// {
	// String tip = cacherSyn.udp.getActiveMasterIP();
	// boolean bf = cacherSyn.checkFreezen(tip, this.strCacherName);
	// if (bf)
	// {
	// throw new RuntimeException("The Master Server[" + tip +
	// "] is in freezen state,please reboot this web server after a while!");
	// }
	//
	// }

	// synchronized public void setInitState(short st)
	// {
	// if (st < UNKNOW_INIT || st > AFTER_INIT)
	// {
	// initState = UNKNOW_INIT;
	// return;
	// }
	//
	// initState = st;
	// }
	//
	// public short getInitState()
	// {
	// return initState;
	// }
	//
	// synchronized public void beforeInit(boolean clearexisted)
	// {
	// //if(synType!=CacherSyner.SYN_SAME)
	// //throw new RuntimeException("Only SYN_SAME can using beforeInit()") ;
	//
	// initState = BEFORE_INIT;
	// if (clearexisted)
	// {
	// clear();
	// }
	// }
	//
	// synchronized public void beginInit()
	// {
	// //if(synType!=CacherSyner.SYN_SAME)
	// //throw new RuntimeException("Only SYN_SAME can using beginInit()") ;
	//
	// initState = this.DURING_INIT;
	// }
	//
	// synchronized public void endInit()
	// {
	// //if(synType!=CacherSyner.SYN_SAME)
	// //throw new RuntimeException("Only SYN_SAME can using endInit()") ;
	// Object o = null;
	// while (duringInitBuf.size() > 0)
	// {
	// o = duringInitBuf.remove(0);
	// //
	// if (o instanceof Shell)
	// {
	// Shell sh = (Shell) o;
	// Shell tmpsh = cacherBuffer.accessShell(sh.getKey());
	// if (tmpsh == null)
	// {
	// cacherBuffer.addShell(sh);
	// }
	// else
	// {
	// tmpsh.setContent(sh.getContent());
	// tmpsh.setRefresh(sh.isRefresh());
	// tmpsh.setLiveTime(sh.getLiveTime());
	// }
	// }
	// else if (o instanceof Object[])
	// {
	// Object[] os = (Object[]) o;
	// removeNoSyn(os[0]);
	// }
	// else if (o instanceof String)
	// {
	// if ("clear".equals( (String) o))
	// {
	// clearNoSyn();
	// }
	// }
	// }
	// initState = AFTER_INIT;
	// }

	/*
	 * synchronized public CacherIniter obtainIniter() {
	 * initer.setInitState(CacherIniter.BEFORE_INIT) ; return initer ; }
	 */
	/*
	 * synchronized public void freeIniter(CacherIniter ci) { if(ci!=initer)
	 * throw new RuntimeException("The Initer is not same to be freed!") ; }
	 */

	/**
	 * 得到緩沖名
	 */
	public String getName()
	{
		return strCacherName;
	}

	// synchronized public void setSynType(short syn)
	// { //System.out.println ("SetSynType-------"+syn+" ["+strCacherName+"]") ;
	// if (syn == CacherSyner.SYN_UNIQUE)
	// {
	// throw new RuntimeException("Not Support Unique Syner now!");
	// }
	//
	// if (syn == CacherSyner.SYN_SAME_MEM)
	// {
	// throw new RuntimeException(
	// "The method setSynType(short) cannot be used in SAME_MEM model!");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产色综合久久ai换脸 | 九九久久精品视频| 欧美日韩国产精品成人| 一区二区三区四区精品在线视频| av电影天堂一区二区在线观看| 国产精品麻豆久久久| eeuss国产一区二区三区| 国产精品色在线观看| 9i看片成人免费高清| 亚洲影院久久精品| 欧美一级理论片| 久久成人免费网| 国产欧美va欧美不卡在线| youjizz久久| 亚洲夂夂婷婷色拍ww47 | 欧美精品丝袜中出| 三级在线观看一区二区| 欧美精品一区二区三区久久久| 国产伦精品一区二区三区视频青涩| 国产精品视频yy9299一区| 色婷婷av一区二区三区大白胸| 亚洲综合成人网| 日韩免费视频一区二区| 欧美亚洲国产一区二区三区| 亚洲国产色一区| 日韩美女视频在线| av一区二区三区在线| 亚洲国产va精品久久久不卡综合| 欧美mv日韩mv| 色综合天天综合狠狠| 免费成人在线网站| 亚洲视频狠狠干| 日韩精品一区在线观看| 成人精品鲁一区一区二区| 亚洲一区欧美一区| 2欧美一区二区三区在线观看视频| 91在线无精精品入口| 久久爱另类一区二区小说| 国产精品久久久一本精品| 欧美福利视频导航| k8久久久一区二区三区 | 日本色综合中文字幕| 国产精品美女久久久久久久久久久| 精品婷婷伊人一区三区三| 国产成+人+日韩+欧美+亚洲| 丝袜脚交一区二区| 国产精品初高中害羞小美女文| 日韩视频免费观看高清完整版在线观看| 成人黄色777网| 久久av资源网| 亚洲妇女屁股眼交7| 国产精品国产自产拍在线| 精品三级av在线| 欧美日韩国产不卡| 91美女在线视频| 国产成人精品免费在线| 奇米888四色在线精品| 亚洲一区二区视频在线观看| 中文字幕免费不卡在线| 精品88久久久久88久久久| 欧美精品1区2区| 欧美日韩三级视频| 色噜噜狠狠成人中文综合| 成人精品gif动图一区| 国产成人午夜电影网| 久久99久久久欧美国产| 日韩在线a电影| 亚洲成人你懂的| 一级日本不卡的影视| 亚洲免费资源在线播放| 最新热久久免费视频| 午夜私人影院久久久久| 一区二区三区中文在线观看| 亚洲人亚洲人成电影网站色| 国产精品久久久久久福利一牛影视 | 91热门视频在线观看| 成人中文字幕电影| www.色精品| 成人av在线一区二区| 成人黄色电影在线| 波多野结衣的一区二区三区| 成人app软件下载大全免费| 成人免费视频一区二区| 成人免费观看视频| 99久久久无码国产精品| 成人av午夜电影| 97精品视频在线观看自产线路二| 99久久亚洲一区二区三区青草| zzijzzij亚洲日本少妇熟睡| 色欲综合视频天天天| 欧美三级乱人伦电影| 欧美日韩和欧美的一区二区| 欧美精品日韩一本| 日韩一区二区三区免费观看| 精品久久久久99| 国产蜜臀97一区二区三区 | 成人av在线资源网站| 色综合天天狠狠| 欧美日韩高清影院| 欧美大度的电影原声| 久久久亚洲国产美女国产盗摄 | 国产精品一区三区| av成人免费在线| 欧美日韩免费电影| 欧美精品一区二区三区高清aⅴ | 免费在线观看视频一区| 国产一区二区三区不卡在线观看| 成人国产免费视频| 欧美三级一区二区| 精品国产亚洲一区二区三区在线观看| 久久婷婷色综合| 伊人性伊人情综合网| 蜜桃视频一区二区三区| 国产成人免费网站| 欧美性xxxxxx少妇| 久久亚洲精华国产精华液| 天堂蜜桃91精品| 成人综合婷婷国产精品久久| 欧洲精品中文字幕| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲欧洲精品成人久久奇米网| 亚洲va韩国va欧美va| 国产成人av电影在线| 欧美日韩五月天| 国产日产欧产精品推荐色| 亚洲香肠在线观看| 国产另类ts人妖一区二区| 在线亚洲高清视频| 国产清纯美女被跳蛋高潮一区二区久久w | 丁香激情综合国产| 欧美精品日韩一本| 亚洲视频你懂的| 国内精品久久久久影院色| 欧美优质美女网站| 国产丝袜在线精品| 蜜臀精品久久久久久蜜臀| 99re热这里只有精品免费视频 | 日本高清无吗v一区| 久久无码av三级| 天天av天天翘天天综合网| 成人黄色电影在线| 久久久久久夜精品精品免费| 性做久久久久久久久| 91丨九色丨尤物| 久久免费的精品国产v∧| 视频在线观看一区二区三区| 日本电影欧美片| 日本一区二区成人| 国产在线国偷精品免费看| 欧美高清你懂得| 一区二区在线电影| 波多野结衣中文一区| 久久影音资源网| 日韩成人免费电影| 精品视频1区2区| 亚洲最快最全在线视频| 波多野结衣在线一区| 日本一区二区三区久久久久久久久不| 青娱乐精品在线视频| 欧美日韩国产影片| 亚洲一区二区成人在线观看| 99视频一区二区三区| 国产欧美视频在线观看| 国产乱国产乱300精品| 久久尤物电影视频在线观看| 精品一区二区免费看| 精品国产麻豆免费人成网站| 视频一区二区中文字幕| 欧美群妇大交群的观看方式| 亚洲一卡二卡三卡四卡五卡| 欧美自拍偷拍一区| 午夜婷婷国产麻豆精品| 欧美精品vⅰdeose4hd| 日韩成人午夜电影| 欧美成人aa大片| 国产一区二区网址| 国产欧美一区在线| 99vv1com这只有精品| 悠悠色在线精品| 欧美日韩久久不卡| 免费一区二区视频| 精品国产网站在线观看| 国产精品亚洲а∨天堂免在线| 日本一区二区视频在线| av影院午夜一区| 一区二区久久久| 欧美一区二区在线看| 精品一区二区三区免费观看| 国产农村妇女精品| 日本韩国一区二区| 欧美a级一区二区| 国产亚洲一区二区三区| 99re8在线精品视频免费播放| 洋洋av久久久久久久一区| 宅男在线国产精品| 国产一区二区0| 亚洲人成在线播放网站岛国 | 欧美国产精品专区| 91国偷自产一区二区三区成为亚洲经典| 亚洲主播在线观看|