java 对象池 apache_Apache common pool2 对象池

packageeasypool;importjava.util.concurrent.ConcurrentLinkedQueue;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;public abstract class ObjectPool{private ConcurrentLinkedQueuepool;privateScheduledExecutorService executorService;/*** Creates the pool.

*

*@paramminIdle minimum number of objects residing in the pool*/

public ObjectPool(final intminIdle) {//initialize pool

initialize(minIdle);

}/*** Creates the pool.

*

*@paramminIdle minimum number of objects residing in the pool

*@parammaxIdle maximum number of objects residing in the pool

*@paramvalidationInterval time in seconds for periodical checking of minIdle / maxIdle conditions in a separate thread.

* When the number of objects is less than minIdle, missing instances will be created.

* When the number of objects is greater than maxIdle, too many instances will be removed.*/

public ObjectPool(final int minIdle, final int maxIdle, final longvalidationInterval) {//initialize pool

initialize(minIdle);//check pool conditions in a separate thread

executorService =Executors.newSingleThreadScheduledExecutor();

executorService.scheduleWithFixedDelay(newRunnable()

{

@Overridepublic voidrun() {int size =pool.size();if (size

pool.add(createObject());

}

}else if (size >maxIdle) {int sizeToBeRemoved = size -maxIdle;for (int i = 0; i < sizeToBeRemoved; i++) {

pool.poll();

}

}

}

}, validationInterval, validationInterval, TimeUnit.SECONDS);

}/*** Gets the next free object from the pool. If the pool doesn't contain any objects,

* a new object will be created and given to the caller of this method back.

*

*@returnT borrowed object*/

publicT borrowObject() {

T object;if ((object = pool.poll()) == null) {

object=createObject();

}returnobject;

}/*** Returns object back to the pool.

*

*@paramobject object to be returned*/

public voidreturnObject(T object) {if (object == null) {return;

}this.pool.offer(object);

}/*** Shutdown this pool.*/

public voidshutdown() {if (executorService != null) {

executorService.shutdown();

}

}/*** Creates a new object.

*

*@returnT new object*/

protected abstractT createObject();private void initialize(final intminIdle) {

pool= new ConcurrentLinkedQueue();for (int i = 0; i < minIdle; i++) {

pool.add(createObject());

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值