国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Jakarta Commons項目研究--pool

2019-11-18 14:17:35
字體:
來源:轉載
供稿:網友

一.pool項目
到底什么是 pool, 簡單來說, 就是先建立一些存在的 object, 放在 pool 之中, 當你有需要的時候,
可以從 pool 中直接獲取, 不需要重新建立.. 最常聽到的就是 database connection pooling,
因為建立數據庫連結是一件耗時的工作, 假如我們先把連結建立好, 就可以節省這一些時間。database
connection pooling 即DBCP。
1.基礎類結構
pool的基礎類:
public interface ObjectPool {
Object borrowObject();
void returnObject(Object borrowed);
}
主要擴展類:
public interface KeyedObjectPool {
Object borrowObject(Object key);
void returnObject(Object key, Object borrowed);
}按照key來索引pool的對象

基礎類僅提供了最基本的兩個函數,用來創建和返回pool對象。
2.實現的基本類
BaSEObjectPool--PoolableObjectFactory--BasePoolableObjectFactory
KeyedObjectPool--KeyedPoolableObjectFactory--BaseKeyedPoolableObjectFactory
StackObjectPool--StackKeyedObjectPool--可以在初始化創建實例,提供有限的 idle 數量
GenericObjectPool--GenericKeyedObjectPool--包含了設定 idle, active
的數量以及回收到pool中的設置
SoftReferenceObjectPool--可以隨需要進行增加,他的回收是由垃圾回收站進行的
總的來說,它提供了 Pool 的 API 主要有三個方面:
提供一般性的對象 pool 接口, 可以簡單地去使用和實現. 比如BaseObjectPool和KeyedObjectPool.
提供小工具可以建立模塊化的 pool. 比如StackObjectPool.
實現出一些通用性的 pool. 比如GenericObjectPool.
3.實現

ObjectPool

Object obj = null;

try {
//創建對象
obj = pool.borrowObject();
//捕捉異常
} catch(Exception e) {
} finally {
//確認對象是否已經返回
if(null != obj) {
pool.returnObject(obj);
}
}

KeyedObjectPool

Object obj = null;
Object key = "Key";

try {
//創建對象
obj = pool.borrowObject(key);
//捕捉異常
} catch(Exception e) {
} finally {
//確認返回
if(null != obj) {
pool.returnObject(key,obj);
}
}
其它的類型繼續開發就可以了
4.范例(取自apache的commons組)
ReaderUtil.java

import java.io.Reader;
import java.io.IOException;

public class ReaderUtil {

public ReaderUtil() {
}

/**
* Dumps the contents of the {@link Reader} to a
* String, closing the {@link Reader} when done.
*/
public String readToString(Reader in)
throws IOException {
StringBuffer buf = new StringBuffer();
try {

for( int c = in.read(); c != -1; c = in.read()) {
buf.append((char)c);
}
return buf.toString();
} catch(IOException e) {
throw e;
} finally {
try {
in.close();
} catch (Exception e) {
// ignored
}
}
}
}

改換一下順序,先取得pool,再由pool取值(推薦使用)

import org.apache.commons.pool.ObjectPool;
import java.io.Reader;
import java.io.IOException;

public class ReaderUtil {
PRivate ObjectPool pool;

public ReaderUtil(ObjectPool pool) {
this.pool = pool;
}

/**
* Dumps the contents of the {@link Reader} to a
* String, closing the {@link Reader} when done.
*/
public String readToString(Reader in) throws IOException {
StringBuffer buf = null;
try {
buf = (StringBuffer)(pool.borrowObject());
for(int c = in.read(); c != -1; c = in.read()) {
buf.append((char)c);
}
return buf.toString();
} catch(IOException e) {
throw e;
} catch(Exception e) {
throw new RuntimeException("Unable to borrow buffer from pool" +
e.toString());
} finally {
try {
in.close();
} catch(Exception e) {
// ignored
}
try {
if(null != buf) {
pool.returnObject(buf);
}
} catch(Exception e) {
// ignored
}
}
}
}

用StringBuffer做pool的例子(不推薦使用,僅供熟悉知識)

StringBufferFactory.java

import org.apache.commons.pool.BasePoolableObjectFactory;

public class StringBufferFactory extends BasePoolableObjectFactory {
// for makeObject we′ll simply return a new buffer
public Object makeObject() {
return new StringBuffer();
}

// when an object is returned to the pool,
// we′ll clear it out
public void passivateObject(Object obj) {
StringBuffer buf = (StringBuffer)obj;
buf.setLength(0);
}

// for all other methods, the no-op
// implementation in BasePoolableObjectFactory
// will suffice
}

修改 ReaderUtil 由 StringBufferFactory Pool 得到 StringBuffer.


new ReaderUtil(
new StackObjectPool(
new StringBufferFactory()
)
)
5.總結
我們通常會在 io 的部分采用 pool 機制, 減少一些建立存取的時間, 對于最耗時的數據庫存取,
更是相對的重要,我將會在commons-DBCP專題進行介紹,本篇是本系列的第二篇,以后將陸續推出,下期主題就是DBCP,請繼續關注.
6.參考 -- 相關書目或相關文章
*Jakarta Commons:
http://jakarta.apache.org/commons/
*Jakarta Commons Pool
http://jakarta.apache.org/commons/pool/
*Jakarta Commons Pool API:
http://jakarta.apache.org/commons/pool/apidocs/index.Html
*Oreilly: Using the Jakarta Commons, Part 3: #3
http://www.onjava.com/pub/a/onjava/2003/07/23/commons.html?page=3

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周口市| 宝坻区| 泸州市| 漳浦县| 麻阳| 开封市| 拜泉县| 泗阳县| 菏泽市| 沙洋县| 呼和浩特市| 太康县| 丰原市| 长宁区| 木里| 华安县| 济南市| 勐海县| 兴和县| 兖州市| 扎鲁特旗| 平罗县| 县级市| 都安| 六盘水市| 邵阳县| 玉门市| 蓬溪县| 利辛县| 清徐县| 固原市| 莱阳市| 乌鲁木齐市| 宝山区| 芦溪县| 新泰市| 黄龙县| 遂宁市| 南汇区| 沐川县| 左贡县|