通常一个对象创建/销毁的时候非常耗时,我们不会频繁的创建销毁它,而是考虑复用。复用对象的一种做法就是对象池,将创建好的对象放入池中维护起来,下次再用的时候直接拿池中已经创建好的对象继续用
GenericObjectPool
GenericObjectPool
是一个通用对象池框架,我们可以借助它实现一个健壮的对象池
维护一个对象池需要实现以下基本的功能:
创建对象
借出对象
验证对象
归还对象
销毁对象
GenericObjectPool 需要通过构造器注入一个PooledObjectFactory
对象,而PooledObjectFactory
中提供了维护对象池的方法
1 | public interface PooledObjectFactory<T> { |
以Socket连接池为例
1 |
|
有了上面的ConnectionFactory,就可以创建对象池了
1 | public class ConnectionPoolExecutor implements Executor { |
上面的代码可以看到一个Executor
接口,这是为了增强代码扩展性,抽象出来的接口
1 | public interface Executor { |
1 | public interface Command { |
我们最终的目的是为了对外提供阻塞长连接服务,但socket对象池并非唯一实现方式。参考Command模式,我们只需要实现不同的executor就可以扩展不同的socket创建方式
1 |
|