麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品成人久久 | 欧美无极品| 国产精品视频成人 | 深夜福利久久久 | 久久精品高清 | 久久成人视屏 | 久久久久亚洲精品国产 | 久久精品国产99国产精品亚洲 | 中文字幕在线永久视频 | 免费观看一级 | 一本免费视频 | 激情网站免费观看 | 国产精品视频成人 | 九九热视频这里只有精品 | 91看片片 | 牛牛视频在线 | 最新av免费网址 | xnxx 美女19 | 56av国产精品久久久久久久 | 成人精品久久久 | 91免费高清视频 | 国产精品久久77777 | 大学生a级毛片免费视频 | 久久精品观看 | 国产一级毛片高清视频完整版 | 少妇色诱麻豆色哟哟 | 一区二区久久精品66国产精品 | 91精品国产91热久久久做人人 | 久久影院在线观看 | 日韩在线激情 | 国产成人精品网站 | 国产乱xxxx | 国产成人高潮免费观看精品 | 亚洲免费在线看 | 黄色毛片a级 | 最新中文字幕第一页视频 | 日日摸夜夜添夜夜添牛牛 | a网站在线 | 日本在线播放一区二区三区 | 午夜色视频在线观看 | 精品国产乱码一区二区三区四区 |