package com.dy.common.mw.protocol;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
public class PrefixedDataAvailablePool {
|
|
protected static HashMap<String, List<PrefixedDataAvailable>> pool = new HashMap<>() ;
|
|
/**
|
* 生成对象
|
* 线程非安全的,所以用到synchronized
|
* @param clazz 预处理类
|
* @return 预处理类对象
|
*/
|
public static synchronized PrefixedDataAvailable getInstance(Class<?> clazz)throws Exception {
|
if(pool == null){
|
pool = new HashMap<>() ;
|
}
|
String className = clazz.getName() ;
|
PrefixedDataAvailable obj = null ;
|
|
List<PrefixedDataAvailable> list = pool.get(className) ;
|
if(list == null){
|
list = new ArrayList<>() ;
|
pool.put(className, list) ;
|
}else if(list.size() > 0){
|
obj = list.get(0) ;
|
list.remove(0) ;
|
}
|
|
if(obj == null){
|
try {
|
obj = (PrefixedDataAvailable)clazz.getDeclaredConstructor().newInstance() ;
|
//obj = (PrefixedDataAvailable)clazz.newInstance();
|
} catch (Exception e) {
|
throw new Exception( "由" + className + "生成实例失败!");
|
}
|
}
|
return obj ;
|
}
|
|
/**
|
* 把对象放回池中
|
* @param clazz 预处理类
|
* @param obj 预处理类对象
|
*/
|
public static void freeInstance(Class<?> clazz, PrefixedDataAvailable obj) {
|
if(pool != null){
|
String className = clazz.getName() ;
|
List<PrefixedDataAvailable> list = pool.get(className) ;
|
if(list != null){
|
list.add(obj) ;
|
}
|
}
|
}
|
|
}
|