Apache默认提供的3种ObjectPool:
StackObjectPool,GenericObjectPool,SoftReferenceObejctPool
-
public interface ObjectPool {
- Object borrowObject();
-
void returnObject(Object borrowed);
- void addObject();
- void setFactory(PoolableObjectFactory)
- }
StackObjectPool,GenericObjectPool,SoftReferenceObejctPool,一般使用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是Java开发中的一个对象池库,主要用于提高对象的重用效率,从而提升系统性能。在本文中,我们将深入探讨这个库的核心概念、设计模式以及如何通过源码学习来理解其工作原理。 首先,Apache ...
Apache Commons Pool2是一个Java对象池库,用于管理可重用对象。对象池是软件设计中的一个概念,通过池化资源,可以有效地减少创建和销毁对象的开销,提高系统的性能和效率。Apache Commons Pool2是Apache Commons...
连接池:别让连接池帮了倒忙:connectionpool 20%的业务代码的Spring声明式事务,可能都没处理正确:transaction 数据库索引:索引不是万能药:sqlindex 判等问题:程序里如何确定你就是你?:equals 数值计算:注意...
谷歌师兄的leetcode刷题笔记#dcpots 用于分发应用程序实现的 lib 组件 (C++) ##特征## 1. App framework library (base/App.hpp) 2. A non-blocked tcp socket msg event handler lib (client/server) [base/...
- **pool目录**:存放软件包的地方,根据不同的用途分为不同的子目录。 - **sid诞生记**:解释了unstable发行版(sid)的历史背景和发展过程。 - **上载到incoming中的软件包**:介绍新软件包如何被上传到Debian...