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

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

?? cacher.java

?? 實現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中的單條內容,并且
 * 當應用發現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
	// ;
	/***************************************************************************
	 * 參數區
	 **************************************************************************/
	public static final int DEFAULT_CACHE_LENGTH = Integer.MAX_VALUE;

	/***************************************************************************
	 * 啟動區
	 **************************************************************************/
	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);
	}

	/**
	 * 根據前綴名得到所有相關的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;
	}

	/***************************************************************************
	 * 控制區
	 **************************************************************************/
	/**
	 * 監控線程對象
	 */
	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中所有的過期數據,以騰出內存
	 *
	 */
	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中取數據,或加入數據,都應該調用改方法
	 * 該方法根據一定的策略,決定何時啟動清理過程
	 */
	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();
		}
	}
	/**
	 * 設置監控線程檢測時間間隔
	 */
	public static void setCheckInterval(long t)
	{
		checkInterval = t;
	}

	public static long getCheckInterval()
	{
		return checkInterval;
	}

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

	// ////////////////////
	/***************************************************************************
	 * 保存區
	 **************************************************************************/
	/**
	 * 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免费精品国自产拍在线不卡| 欧美福利视频导航| 午夜精品福利视频网站| 欧美日产在线观看| 亚洲精品乱码久久久久久| 欧洲日韩一区二区三区| 日韩成人午夜电影| 久久无码av三级| 成人激情免费电影网址| 欧美国产丝袜视频| 色综合天天综合网国产成人综合天| 亚洲精品福利视频网站| 欧美肥胖老妇做爰| 国产乱子轮精品视频| 综合在线观看色| 91精品午夜视频| 成人污视频在线观看| 亚洲一区二区美女| 久久久综合九色合综国产精品| 成人黄动漫网站免费app| 亚洲一线二线三线视频| 亚洲精品一线二线三线无人区| 麻豆国产精品视频| 自拍视频在线观看一区二区| 欧美日韩亚洲国产综合| 美脚の诱脚舐め脚责91| 最新国产の精品合集bt伙计| 在线不卡中文字幕播放| 福利电影一区二区三区| 五月综合激情网| 国产精品天天摸av网| 欧美色视频在线| 国产精品一区二区无线| 夜夜揉揉日日人人青青一国产精品| 日韩一级免费观看| 91麻豆国产在线观看| 狠狠色丁香久久婷婷综合丁香| 中文字幕第一区| 日韩欧美国产不卡| 欧美性受极品xxxx喷水| 国产不卡在线视频| 麻豆精品久久精品色综合| 亚洲美女屁股眼交3| 久久久久久**毛片大全| 欧美日韩一区高清| 91麻豆蜜桃一区二区三区| 国产在线不卡一区| 日产国产欧美视频一区精品| 中文字幕在线一区二区三区| 精品久久国产97色综合| 欧美午夜电影网| 91在线观看成人| 成人黄色在线看| 国产精品99久久久久久宅男| 免费观看91视频大全| 亚洲一区二区3| 一级中文字幕一区二区| 国产精品初高中害羞小美女文| 26uuu另类欧美| 日韩视频一区二区三区| 欧美顶级少妇做爰| 欧美三区在线视频| 色妹子一区二区| 91浏览器打开| 99国内精品久久| 99久久99久久精品免费观看| 精品系列免费在线观看| 精品国产凹凸成av人导航| 国产精品一级黄| 性久久久久久久久| 色婷婷久久久久swag精品| 天堂成人免费av电影一区| 久久久久国产精品免费免费搜索| 日韩精品三区四区| 1024精品合集| www亚洲一区| 欧美一卡二卡三卡| 欧美一级日韩免费不卡| 91精品国产一区二区三区香蕉| 欧美日韩高清一区二区不卡| 欧美精品v国产精品v日韩精品| 在线观看中文字幕不卡| 日本高清无吗v一区| 日本精品一区二区三区四区的功能| 91麻豆文化传媒在线观看| 色久优优欧美色久优优| 欧美私模裸体表演在线观看| 欧美久久久久久蜜桃| 91精品国产91久久久久久一区二区| 91精品一区二区三区在线观看| 日韩三级在线免费观看| 亚洲精品一区二区三区99| 久久久久久一级片| 国产精品视频免费| 一区二区三区自拍| 日本一道高清亚洲日美韩| 男人的天堂久久精品| 福利一区二区在线观看| 欧洲视频一区二区| 欧美一级国产精品| 欧美激情中文不卡| 一区二区不卡在线播放 | 欧美四级电影在线观看| 欧美精品日日鲁夜夜添| 精品国产乱码久久久久久牛牛| 久久精子c满五个校花| 亚洲区小说区图片区qvod| 日本v片在线高清不卡在线观看| 狠狠网亚洲精品| 一本大道久久a久久综合| 欧美一区二视频| 国产精品不卡在线| 美洲天堂一区二卡三卡四卡视频| 风间由美一区二区三区在线观看 | 五月婷婷久久综合| 久久精品国产免费| 97aⅴ精品视频一二三区| 欧美区在线观看| 欧美国产禁国产网站cc| 天天av天天翘天天综合网| 高清在线观看日韩| 欧美日韩精品一区二区三区| 国产人伦精品一区二区| 视频在线观看91| 色综合久久久久久久久| 精品国产乱码久久久久久久久| 一区二区三区四区蜜桃| 国产福利91精品| 91精品国产一区二区| 一区二区三区蜜桃| 成年人国产精品| 久久久久久毛片| 日日夜夜免费精品视频| 一本色道综合亚洲| 国产区在线观看成人精品| 日韩精品成人一区二区三区| av在线播放不卡| 久久久久久久久久电影| 久久精品国内一区二区三区| 欧美午夜寂寞影院| 亚洲男人电影天堂| www.欧美日韩国产在线| 欧美精品一区二区三区在线播放| 五月婷婷欧美视频| 在线观看国产91| 亚洲日本va午夜在线电影| 成人免费精品视频| 国产婷婷一区二区| 国产呦萝稀缺另类资源| 欧美精品色一区二区三区| 亚洲狠狠爱一区二区三区| 色综合天天综合网国产成人综合天 | 不卡av在线免费观看| 久久综合久久综合九色| 麻豆精品在线播放| 日韩欧美三级在线| 美国毛片一区二区三区| 91精品国产综合久久久久久漫画 | 国产麻豆精品在线| 精品国产一区二区亚洲人成毛片| 日本伊人色综合网| 91麻豆精品国产91久久久久久 | 在线视频欧美精品| 专区另类欧美日韩| 色综合色综合色综合色综合色综合| 日本一区二区电影| 成人激情小说乱人伦| 国产精品的网站| 91亚洲国产成人精品一区二区三| 亚洲欧美成aⅴ人在线观看| 91麻豆国产福利精品| 一区二区三区精品视频| 91福利视频久久久久| 亚洲一区二区黄色| 欧美精品v日韩精品v韩国精品v| 偷拍亚洲欧洲综合| 日韩一区国产二区欧美三区| 久久99精品国产91久久来源| 久久久久亚洲蜜桃| 99久久国产综合色|国产精品| 亚洲天堂免费看| 欧美日韩国产首页| 精品无人码麻豆乱码1区2区| 国产欧美日韩三级| 94色蜜桃网一区二区三区| 夜夜操天天操亚洲| 在线成人免费视频| 韩国av一区二区| 亚洲色图制服诱惑| 91精品国产综合久久福利软件| 久久黄色级2电影| 欧美激情中文字幕| 欧美色电影在线| 国产精品一区二区x88av| 国产精品久久久久国产精品日日| 色综合久久中文综合久久97| 日韩va欧美va亚洲va久久| 国产欧美日韩视频一区二区 | 在线不卡一区二区|