`
csbison
  • 浏览: 150632 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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) 如何判断有空闲的连接?    

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics