Java Pool

簡介,連線池(Connect Pool):,執行緒池(Thread Pool),實現池的一般方式,

簡介

Java Pool(Java 池)
池(Pool)是為了減少資源創建、初始化的系統開銷而採取的一種實現模式,在Java中常見的池一般有:

連線池(Connect Pool):

我們需要使用Connection Pool的情況都通常都是指網路連線,比如:DB connection, Socket的Connection,這些對象往往需要使用Pool來管理,因為這些對象的重複創建需要較長的時間,是系統性能的瓶頸。
Connection Pool實現包括兩類:第一種是受管的Connection Pool,需要實現JCA的Resource Adapter規範,通過JNDI lookup出來ConnectionPool對象,然後調用受管ConnectionPool對象的getConnection方法獲得connection,第二種是自己實現一個Connection的Object Pool,通過自定義的ConnectionFactory類獲得一個connection。
第一種:受管的Connection Pool
目前J2EE Container中常用的connection pool有:
DB Connection Pool
JMSConnection Pool
LDAPConnection Pool
JCA Connection Pool
DB Connection Pool即JDBC connection pool,基本上所有的J2EE容器都提供了實現,JMS connection pool一般的JMS Server都提供了實現,LDAP connection pool由LDAP Server提供實現, JCA connection pool需要自己實現resource adapter。

  
第二種:實現一個Connection的Object Pool
通常可以在已有第三方的Object Pool上實現自己的Connection Pool,如apache的commons pool,如果非要從頭開始當然也是可以的。通常如果是要用規範的API獲取connection,如jdbcjms,舉個例子:DriverManager.getConnection, Connection.close, 為了使這個Connection Pool可以方便地用在各種jdbc驅動上,而且為了使原來沒有使用該Connection Pool的套用可以方便地切換到該Connection Pool上,我們可能需要用到AOP,這樣DriverManager.getConnection就是從pool中取出connecton(如果pool中有的話),Connection.close就是return給pool,從邏輯上釋放。用OO的方法也是可以實現的。

執行緒池(Thread Pool)

應用程式可以有多個執行緒,這些執行緒在休眠狀態中需要耗費大量時間來等待事件發生。其他執行緒可能進入睡眠狀態,並且僅定期被喚醒以輪循更改或更新狀態信息,然後再次進入休眠狀態。為了簡化對這些執行緒的管理,.NET框架為每個進程提供了一個執行緒池,一個執行緒池有若干個等待操作狀態,當一個等待操作完成時,執行緒池中的輔助執行緒會執行回調函式。執行緒池中的執行緒由系統管理,程式設計師不需要費力於執行緒管理,可以集中精力處理應用程式任務。
執行緒池是一種多執行緒處理形式,處理過程中將任務添加到佇列,然後在創建執行緒後自動啟動這些任務。執行緒池執行緒都是後台執行緒.每個執行緒都使用默認的堆疊大小,以默認的優先權運行,並處於多執行緒單元中.如果某個執行緒在託管代碼中空閒(如正在等待某個事件),則執行緒池將插入另一個輔助執行緒來使所有處理器保持繁忙.如果所有執行緒池執行緒都始終保持繁忙,但佇列中包含掛起的工作,則執行緒池將在一段時間後創建另一個輔助執行緒但執行緒的數目永遠不會超過最大值.超過最大值的執行緒可以排隊,但他們要等到其他執行緒完成後才啟動。

實現池的一般方式

實現一個資源池,一般要實現以下方法: 1、用Vector作為池中存儲元素的容器。之所以使用Vector,而不是Map、List等,是基於Vector執行緒安全考慮;
2、實現池中元素的獲取、釋放功能;
3、實現池的finalize方法,保證系統在垃圾回收時正確回收目前處於idle狀態的資源,保證正在被使用的資源不被系統回收。

相關詞條

熱門詞條

聯絡我們