`
csbison
  • 浏览: 156916 次
  • 性别: 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) 如何判断有空闲的连接?    

 

 

 

分享到:
评论

相关推荐

    Apache commons-pool2-2.4.2源码学习笔记

    Apache Commons Pool2是Java开发中的一个对象池库,主要用于提高对象的重用效率,从而提升系统性能。在本文中,我们将深入探讨这个库的核心概念、设计模式以及如何通过源码学习来理解其工作原理。 首先,Apache ...

    commons-pool2-sr:Apache Commons Pool原始代码剖析笔记

    Apache Commons Pool2是一个Java对象池库,用于管理可重用对象。对象池是软件设计中的一个概念,通过池化资源,可以有效地减少创建和销毁对象的开销,提高系统的性能和效率。Apache Commons Pool2是Apache Commons...

    java8集合源码分析-common-mistakes:常见错误

    连接池:别让连接池帮了倒忙:connectionpool 20%的业务代码的Spring声明式事务,可能都没处理正确:transaction 数据库索引:索引不是万能药:sqlindex 判等问题:程序里如何确定你就是你?:equals 数值计算:注意...

    谷歌师兄的leetcode刷题笔记-dcpots:分发系统基本组件

    谷歌师兄的leetcode刷题笔记#dcpots 用于分发应用程序实现的 lib 组件 (C++) ##特征## 1. App framework library (base/App.hpp) 2. A non-blocked tcp socket msg event handler lib (client/server) [base/...

    debian reference 中文手册

    - **pool目录**:存放软件包的地方,根据不同的用途分为不同的子目录。 - **sid诞生记**:解释了unstable发行版(sid)的历史背景和发展过程。 - **上载到incoming中的软件包**:介绍新软件包如何被上传到Debian...

Global site tag (gtag.js) - Google Analytics