common-pool笔记

   Apache默认提供的3种ObjectPool:
   
StackObjectPoolGenericObjectPoolSoftReferenceObejctPool

  1. public interface ObjectPool {   
  2.     Object borrowObject();   
  3.     void returnObject(Object borrowed);   
  4.     void addObject();
  5.     void setFactory(PoolableObjectFactory)
  6. }   

    StackObjectPoolGenericObjectPoolSoftReferenceObejctPool,一般使用StackObejctPool就可以了

 

    StackObjectPool-  java.util.Stack来维护对象池
    SoftReferenceObjectPool-
 java.util.ArrayList来维护对象池
    GenericObjectPool-
  org.apache.commons.collections.CursorableLinkedList来维护对象池


    

    使用PoolableObjectFactory来创建pool。而没有必要间接使用ObjectPoolFactory createPool()

 


    
问题:
    1.对应Socket,我需要真正实现的代码就是:
     1)
如果socket正在被使用;那么是不能被其他人同时使用的
     2)
如果socket使用完了;那不必关闭,可以设置状态并让其他人继续使用。

 

     3) 如果将要使用的socket已经close(),那么必须重新open()
     4)
maxWait,maxIdle的处理;maxIdle表示可以在空闲时期建立的socket连接数;
   

 

    2. dbcp的参考实现
      PoolingDataSource
间接实现了ObjectPool接口(使用GenericObjectPool),
     1)
可以borrowObject,borrowObject拿出来的Object就是Connection
     2)
在初始化的时候,DataSourceImpl还可以根据pool的大小来addObject()
      socket
相对于数据库连接中的connection
   
       getConnection() --> borrowObject();
       connection.close() -->returnObject(obj);

 

  设计和实现:
       1)需要实现ObjectPool接口,用于getSocketClient()
       2)
需要对SocketClient的封装,重载close()方法。
       3)PoolableObjectFactory
需要吗?
       4)
除了接口,commons-pool可以帮我做什么?
          
直接使用StackObjectPool,但是要自己实现PoolableObjectFactory 方法。

 

       5) 如何判断有空闲的连接?    

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值