| New file | 
 |  |  | 
 |  |  | 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) ; | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |    }	 | 
 |  |  | 	 | 
 |  |  | } |