break aa;
}
}
return ms[i];
}
}
}
throw new NoSuchMethodException();
}
}
/** *//**
* 新启线程后台调用给定方法更新缓存中数据据
* @param o
* @param methodName
* @param parameters
* @param key
*/
private void daemonInvoke(Object o, String methodName,Object[] parameters, String key) ...{
if (!threadKeys.contains(key)) ...{
InvokeThread t = new InvokeThread(o, methodName, parameters, key);
t.start();
}
}
/** *//**
* 些类存放方法的主调对像,名称及参数数组
* @author zsy
*
*/
public class MethodInfo ...{
private Object o;
private String methodName;
private Object[] parameters;
public MethodInfo(Object o, String methodName,Object[] parameters) ...{
this.o = o;
this.methodName = methodName;
this.parameters = parameters;
}
public String getMethodName() ...{
return methodName;
}
public void setMethodName(String methodName) ...{
this.methodName = methodName;
}
public Object getO() ...{
return o;
}
public void setO(Object o) ...{
this.o = o;
}
public Object[] getParameters() ...{
return parameters;
}
public void setParameters(Object[] parameters) ...{
this.parameters = parameters;
}
public String toString() ...{
StringBuffer str = new StringBuffer(methodName);
if (parameters != null) ...{
str.append("(");
for (int i = 0; i < parameters.length; i++) ...{
if (parameters[i] instanceof Object[]) ...{
str.append(Arrays.toString((Object[])parameters[i])).append(",");
} else ...{
str.append(parameters[i]).append(",");
}
}
str.append(")");
}
return str.toString();
}
}
/** *//**
* 线程调用方法
* @author zsy
*
*/
private class InvokeThread extends Thread ...{
private Object o;
private String methodName;
private Object[] parameters;
private String key;
public InvokeThread(Object o, String methodName,Object[] parameters, String key) ...{
this.o = o;
this.methodName = methodName;
this.parameters = parameters;
this.key = key;
}
public void run() ...{
threadKeys.add(key);
invoke(o, methodName, parameters, key);
threadKeys.remove(key);
}
}
/** *//**
* 移除缓存中的数据
* @param key
*/
public void removeCacheData(String key) ...{
cacheMap.remove(key);
}
/** *//**
* 移除所有缓存中的数据
*
*/
public void removeAllCacheData() ...{
cacheMap.clear();
}
public String toString() ...{
StringBuffer sb = new StringBuffer("************************ ");
sb.append("正在更新的缓存数据: ");
for (int i = 0; i < threadKeys.size(); i++) ...{
sb.append(threadKeys.get(i)).append(" ");
}
sb.append("当前缓存大小:").append(cacheMap.size()).append(" ");
sb.append("************************");
return sb.toString();
}
}
用法:
例1:代码片段如下:
public class Test {
String rulStr=....;
String encoding=....;
public void getData() {
DataCreator c = new DataCreator();
String result = c.initUrlData(urlStr,encoding);
System.out.println(result);
}
}
每次执行上面代码时都要通过调用 initUrlData方法取得数据,假设此方法很耗资源而耗时间,但对数据时实性要求不高,就是可以用以下方式进行缓存处理,保证很快地取得数据,并根据设置的参数自动更新缓存中数据
注意:initUrlData方法参数值一样时才属于同一个缓存,否则会生成一个新的缓存,也就是说从缓存中取数据与initUrlData方法参数值有关
......
public void getData() {
DataCreator data = new DataCreator();

