对象的池化

很多时候,要创建一个资源类对象,或者是一个大的应用数据对象,所花费的开销都是巨大的. 比如要建立一个连接,要根对方获得握手协定等等. 像这些花销巨大的对象,保存来做成全局不行,因为当前只能供给一个线成使用,那就只能池化了
池化的对象特点是:对象一次只能供给一个线成使用.但又必须尽量保存,以避免巨大的构建开销.
/**Resources是一个将要被池化的对象的接口,有一个被动撤消的close方法(为符合一般性资源类要求)
*/
interface Resources{
void close(){};
}

//真正的资源类
class ConcreteResources implements Resources{
void close(){
   //销毁内部相关资源eg: ...=null;
}
}

/**资源对象池
*/
class ResourcesPool implements Resources{

private List resL = null;
private int CACHE_MAX_SIZE = 10;


public synchronized Resources getResources(){
   if(resL == null)
      resL = new ArrayList();
   if(resL.isEmpty){
      Resources res = new DecResources();
      return res;
   }else{
   int last= resL.size()-1;
   Resources res = resL.get(last);
   resL.remove(last);
   return res;
   }
}

public synchronized void release(Resources res){
   if(resL.size>CACHE_MAX_SIZE){
     res.getReources.close();
   }else{
   resL.add(res);
   }
}

public synchronized void addResources throws Exception(Resources res){
   if(res instanceof DecResources){
     release(res);
   }else(throw new Exception("添加资源类型错误"))
}
}

/**为封闭掉close采用Decortor模式*/
class DecResources extends ResourcesPool implements Resources{
private Resources res= new ConcreteResources();

public void close(){
   release(this);
}

//为直接关闭提供出res
public Resources getResources(){
   return res;
}
}

/**使用:
如果需要获得对象,只需要
ResourcesPool pool = new ResourcesPool();
pool.add(new ...);
Resources res = pool.getResources();
使用.....
res.close();
*/


这是个简单的模型, close是针对大量资源类都提供的方法, 并不一定需要,自己的对象不要最好.逻辑看起来挺麻烦的.

同样,由于使用的是公共非栈对象,给出了syn,,如果使用频繁,类似cache,就使用rw


rw使用方式如下:
ReadWriteLock rw = ReentrantReadWriteLock();
Lock r = rw.readLock();
Lock w = rw.writeLock();

在类中需要读的方法段
r.lock();
...
r.unlock();

在类中需要写的方法段
w.lock();
...
w.unlock();


好多东西都忘记了,要查api,刚好复习下 呵呵
再次说明,这只是例子,编码是随心所欲的..

你可能感兴趣的:(jvm,cache,idea)