资源池管理代码

直接贴代码了。就两个类、两个文件。

 

 

package resourcePool;

import java.io.IOException;

/**
 * this interface describes a factory producing some kind of resource,
 * such as data base connection, networking connection, etc.
 *
 * that resource should be configured by the configuration file
 *
 *
 * @author Charles Zhu  (azhu1123@gmail.com)
 *
 * @param <T> the resource kind
 */

public interface ResourceFactory<T> {
   
    /**
     * configure the resource by the configuration file.
     *
     * @param configurationFilePath        the path of the configuration file
     * @throws    IOException will be thrown while the file indicated by that path is invalid.
     */
    public void configure (String configurationFilePath) throws IOException;
   
   
    /**
     * produce one resource conform to the configuration
     *
     * @return the product - the applying resource
     */
    public abstract T newResource () ;
   
}

 

 

 

 

package resourcePool;


import java.util.*;

/**
 * this class implements a pool for some kind of resource
 *
 * that resource should be the product of the ResourceFactory.
 * the resource are stored in a list maintain in it.
 * they can be applied and returned back.
 * finally, all of them should be destroyed.
 *
 *
 * @author Charles Zhu  (azhu1123@gmail.com)
 *
 * @param <T> the resource kind
 */


public class ResourcePool <T> {
   
    private List<T> allResource;
    private final int poolSize;
    private volatile int inUsed = 0;
    private volatile int totalUsed = 0;
   
    public ResourcePool (int size, ResourceFactory<T> f) {
        this.poolSize = size;
       
        this.allResource = Collections.synchronizedList(new ArrayList<T>());
        for(int i = 0; i < size; i++)
            allResource.add(f.newResource());
    }
   
   
   
    public synchronized T apply () {
        while ( allResource.isEmpty() )
        {
            try {
                wait();
            } catch (InterruptedException e) {
                System.err.println(e.getMessage());
                return null;
            }
        }
       
        totalUsed ++;
        return (T)allResource.remove(inUsed ++);
    }
   
    public synchronized void returnBack (T t) {
        allResource.add(t);
        inUsed --;
        notifyAll();
    }
   
    public int inUsed () {
        return this.inUsed;
    }
   
    public int availableNumber () {
        return poolSize - inUsed;
    }
   
    public void shutDown () {
        //TODO: 关闭所有资源
        //for(T r : allResource)
           
    }
   
}

 

 

 

觉得有兴趣的同志同学,使用后请联系我告诉你使用后的系统性能,以及修改。

如果觉得已有更好的通用实现,请联系我,一起学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值