構建簡單的socket連線池

2021-06-16 23:43:44 字數 3299 閱讀 1644

前奏:這段時間,公司安排了乙個任務:構建乙個管理socket連線的連線池。一開始,選用vector來存放連線。由於這個容器不是併發安全的,於是,每個方法都加乙個synchronized來保持併發時的同步操作,併發效率很差,果斷放棄。空餘時間研究了下多執行緒的併發知識,決定用併發安全的阻塞佇列(linkedblockingqueue),這個容器可以自動維護容量的大小,就免去了再起乙個執行緒去維護執行緒池的大小。為了保證每個連線是可用的,為執行緒池啟動了乙個守護執行緒去定時傳送心跳。

1

public

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...