1 java
// 构造函数, 不要被initIdleCapacity 误解,调用构造函数时,并无放入对象。 // initIdleCapacity为对象池指定一个初始的参考大小(当空间不够时会自动增加)。但在源码中没看到有什么用途。 // maxIdle : 即 returnObject(), 可保存的对象数目的上限。达到这个上限以后,再向池里送回的对象会被自动送去回收。 // initIdleCapacity 要大于 maxIdle public StackObjectPool(PoolableObjectFactory<T> factory, int maxIdle, int initIdleCapacity) { this._pool = null; this._factory = null; this._maxSleeping = 8; this._numActive = 0; this._factory = factory; this._maxSleeping = maxIdle < 0?8:maxIdle; int initcapacity = initIdleCapacity < 1?4:initIdleCapacity; this._pool = new Stack(); this._pool.ensureCapacity(initcapacity > this._maxSleeping?this._maxSleeping:initcapacity); }
public synchronized T borrowObject() throws Exception { this.assertOpen(); Object obj = null; boolean newlyCreated = false; while(null == obj) { if(!this._pool.empty()) { //若是堆栈中有对象,则弹出 obj = this._pool.pop(); } else { // 若是堆栈中没有对象 if(null == this._factory) { throw new NoSuchElementException(); } obj = this._factory.makeObject(); //建立对象 newlyCreated = true; if(obj == null) { throw new NoSuchElementException("PoolableObjectFactory.makeObject() returned null."); } } 。。。。 }