前奏:這段時間,公司安排了乙個任務:構建乙個管理socket連線的連線池。一開始,選用vector來存放連線。由於這個容器不是併發安全的,於是,每個方法都加乙個synchronized來保持併發時的同步操作,併發效率很差,果斷放棄。空餘時間研究了下多執行緒的併發知識,決定用併發安全的阻塞佇列(linkedblockingqueue),這個容器可以自動維護容量的大小,就免去了再起乙個執行緒去維護執行緒池的大小。為了保證每個連線是可用的,為執行緒池啟動了乙個守護執行緒去定時傳送心跳。
1public
class
socketconnectionpool
21public linkedblockingqueuegetfreeconnections()
24/**
25* 功能描述:連線池構造方法
26*
27*
@author
mihu
28*
@version
mihu
29*
@param
config
30*
@throws
unknownhostexception
31*
@throws
ioexception
32*/
33public
socketconnectionpool(connectionpoolconfig config)
3940
this.poolconfig =config;
41this.freeconnections = new linkedblockingqueue(config.getmaxconn()); //構造指定大小的阻塞佇列
4243
init();
4445 } catch
(unknownhostexception e) catch
(connectexception e) catch
(sockettimeoutexception e) catch
(ioexception e) catch
(exception e) finally63}
64}6566
/**67
* 功能描述:初始化連線池
68*
69*
@return
70*
@throws
unknownhostexception
71*
@throws
ioexception
72*
@author
mihu
73*
@version
mihu
74*
@throws
interruptedexception
75*
@since
2013-7-276*
77*/
78public
void init() throws
unknownhostexception, ioexception,sockettimeoutexception,connectexception, interruptedexception
8485}86
87/**
88* 功能描述:新建連線
89*
90*
@param
totalconnsize
91*
@throws
unknownhostexception
92*
@throws
ioexception
93*
@author
mihu
94*
@version
mihu
95*
@since
2013-7-296*
97*/
98public socketconnection newconnection() throws
unknownhostexception, ioexception
103104
/**105
* 功能描述:獲取連線
106*
107*
@return
socketconnection連線
108*
@throws
unknownhostexception
109*
@throws
ioexception
110*
@author
mihu
111*
@version
mihu
112*
@throws
interruptedexception
113*
@since
2013-7-2
114*
115*/
116public socketconnection getconnection() throws
unknownhostexception, ioexception, interruptedexception
124}
125}
126127 socketconnection client = freeconnections.poll(2000,timeunit.milliseconds);
128129
return
client;
130}
131132
133/**
134* 功能描述:將連線還回連線池
135*
136*
@param
client
137*
@throws
ioexception
138*
@author
mihu
139*
@version
mihu
140*
@throws
interruptedexception
141*
@since
2013-7-2
142*
143*/
144public
void freeconnection(socketconnection client) throws
ioexception, interruptedexception
148}
149150 }
NIO socket 的簡單連線池
在最近的專案中,需要寫乙個socket 與 底層伺服器通訊的模組。在設計中,請求物件被封裝 request,訊息返回被封裝為 response.由於socket的程式設計開發經驗少,一開始我使用了短連線的方式,每個請求建立乙個socket通訊,由於每個socket只進行一次讀寫,這大大浪費了系統資源...
jdbc 連線池的簡單使用
這裡使用的是c3p0的連線池,使用的jar包為c3p0 0.9.1.2.jar,使用的資料庫為oracle 下面直接上 連線池的設定 public class connpool catch exception e 通過連線池物件返回資料庫連線 return throws sqlexception p...
Proxool連線池的簡單配置
jdbc oracle thin 127.0.0.1 1521 ora oracle.jdbc.driver.oracledriver 90000 150 3 100 3 4 在web.xml裡新增如下 proxoolservletconfigurator org.logicalcobwebs.pr...