//連線池原理,非常透徹
public class connectionpool catch (exception e)
try catch (exception e)
} static catch (filenotfoundexception e) catch (ioexception e)
} /**
* * 建立乙個資料庫連線池,連線池中的可用連線的數量採用類成員
* initialconnections 中設定的值
*/@suppresswarnings("rawtypes")
private static synchronized void createpool() throws exception
// 建立儲存連線的向量 , 初始時有 0 個元素
connections = new vector();
// 根據 initialconnections 中設定的值,建立連線。
createconnections(initialconnections);
system.out.println(" 資料庫連線池建立成功! ");
logfileop.addmsg("資料庫連線池建立成功!");
} /**
* 建立由 numconnections 指定數目的資料庫連線 , 並把這些連線
* 放入 connections 向量中
* * @param numconnections 要建立的資料庫連線的數目
* @throws sqlexception
* @throws classnotfoundexception
*/@suppresswarnings()
private static void createconnections(int numconnections) throws sqlexception
//add a new pooledconnection object to connections vector
// 增加乙個連線到連線池中(向量 connections 中)
try catch (sqlexception e)
system.out.println(" 資料庫連線己建立 ......");
} }
/*** 建立乙個新的資料庫連線並返回它
* * @return 返回乙個新建立的資料庫連線
*/private static connection newconnection() throws sqlexception
} return conn; // 返回建立的新的資料庫連線
}} /**
* 通過呼叫 getfreeconnection() 函式返回乙個可用的資料庫連線 ,
* 如果當前沒有可用的資料庫連線,並且更多的資料庫連線不能創
* 建(如連線池大小的限制),此函式等待一會再嘗試獲取。
* * @return 返回乙個可用的資料庫連線物件
* @throws exception
*/private static synchronized connection getconnection() throws exception
connection con = getfreeconnection(); // 獲得乙個可用的資料庫連線
// 如果目前沒有可以使用的連線,即所有的連線都在使用中
while (con == null)
return con;// 返回獲得的可用的連線
} /**
* 本函式從連線池向量 connections 中返回乙個可用的的資料庫連線,如果
* 當前沒有可用的資料庫連線,本函式則根據 incrementalconnections 設定
* 的值建立幾個資料庫連線,並放入連線池中。
* 如果建立後,所有的連線仍都在使用中,則返回 null
* @return 返回乙個可用的資料庫連線
*/private static connection getfreeconnection() throws sqlexception
} return conn;
} /**
* 查詢連線池中所有的連線,查詢乙個可用的資料庫連線,
* 如果沒有可用的連線,返回 null
* * @return 返回乙個可用的資料庫連線
*/private static connection findfreeconnection() throws sqlexception catch (sqlexception e)
pconn.setconnection(conn);
}break; // 己經找到乙個可用的連線,退出
}} return conn;// 返回找到到的可用連線
} /**
* 測試乙個連線是否可用,如果不可用,關掉它並返回 false
* 否則可用返回 true
* * @param conn 需要測試的資料庫連線
* @return 返回 true 表示此連線可用, false 表示不可用
*/private static boolean testconnection(connection con) else
} catch (sqlexception e)
// 連線可用,返回 true
return true;
} /**
* 此函式返回乙個資料庫連線到連線池中,並把此連線置為空閒。
* 所有使用連線池獲得的資料庫連線均應在不使用此連線時返回它。
* * @param 需返回到連線池中的連線物件
*/@suppresswarnings("rawtypes")
public void returnconnection(connection conn)
pooledconnection pconn = null;
enumeration enumerate = connections.elements();
// 遍歷連線池中的所有連線,找到這個要返回的連線物件
while (enumerate.hasmoreelements())
} }/**
* 重新整理連線池中所有的連線物件
* */
public synchronized void refreshconnections() throws sqlexception
pooledconnection pconn = null;
@suppresswarnings("rawtypes")
enumeration enumerate = connections.elements();
while (enumerate.hasmoreelements())
// 關閉此連線,用乙個新的連線代替它。
closeconnection(pconn.getconnection());
pconn.setconnection(newconnection());
pconn.setbusy(false);
} }/**
* 關閉連線池中所有的連線,並清空連線池。
*/public final synchronized static void closeconnectionpool() throws sqlexception
pooledconnection pconn = null;
@suppresswarnings("rawtypes")
enumeration enumerate = connections.elements();
while (enumerate.hasmoreelements())
//5 秒後直接關閉它
closeconnection(pconn.getconnection());
// 從連線池向量中刪除它
connections.removeelement(pconn);
} // 置連線池為空
connections = null;
} /**
* 關閉乙個資料庫連線
* * @param 需要關閉的資料庫連線
*/public static void closeconnection(connection conn) catch (sqlexception e)
} /**
* 使程式等待給定的毫秒數
** @param 給定的毫秒數
*/private static void wait(int mseconds) catch (interruptedexception e)
} /**
* 內部使用的用於儲存連線池中連線物件的類
* 此類中有兩個成員,乙個是資料庫的連線,另乙個是指示此連線是否
* 正在使用的標誌。
*/static class pooledconnection
// 返回此物件中的連線
public connection getconnection()
// 設定此物件的,連線
public void setconnection(connection connection)
// 獲得物件連線是否忙
public boolean isbusy()
// 設定物件的連線正在忙
public void setbusy(boolean busy)
}}
JDBC連線池實現
jdbc connection pool 的注意事項有 1.有乙個簡單的函式從連線池中得到乙個 connection。2.close 函式必須將 connection 放回 資料庫連線池。3.當資料庫連線池中沒有空閒的 connection,資料庫連線池必須能夠自動增加 connection 個數。...
ftp連線池實現
專案中需要用到ftp,經常性的開關會造成極大的開銷,效率比較低。就想封裝乙個ftp連線池,不過遺憾的是沒有找到現成的,只得根據別人提供的思路來實現了。建立若干個ftp連線,然後將這些連線放入阻塞佇列blockingqueue中,每次使用時從佇列中獲取乙個連線,使用完成後將連線重新插入佇列中。實現 o...
php redis實現連線池
什麼是連線池?redis連線靜態類。redis連線池 減少redis的重複連線,降低記憶體消耗!通常情況下,當我們需要做redis操作時,會建立乙個連線,並基於這個連線進行redis操作,操作完成後,釋放連線,一般情況下,這是沒問題的,但當併發量比較高的時候,頻繁的連線建立和釋放對效能會有較高的影響...