因爲我沒有發現涉及此主題的問題,所以我想我會將我的解決方案分享給以下方案。答案可能很明顯,但我花了很長的路要找出答案。 :)我會很感激問題和答案以及其他解決方案的反饋。在惰性加載Getter上同步
場景:
假設你有一個多線程的程序,並希望在你的程序對一些功能的數據庫連接(或其他一些共享對象),而你的程序的其他部分並不需要它所有。應該只有一個連接到數據庫,但。
與此同時,您想要檢測db連接丟失並嘗試重新連接。
爲了解決這個問題,你需要實現一個延遲加載模式「getter」,它在返回連接對象之前也檢查連接的有效性。
您的代碼可能是這樣的:
public class Main {
private DB _db;
public static void main(String[] args) {
new Main().start();
}
private void start() {
// Program code goes here
// You create several threads, some of which may call getDB() whenever they need DB access
}
public DB getDB() {
if (_db == null) {
_db = getDBConnection();
} else if (!_db.isConnectionValid()) {
/*
* DB connection is not valid anymore. Let's close it and
* try to get a new connection.
*/
_db.close();
_db = getDBConnection();
}
return _db;
}
private DB getDBConnection() {
DB db;
// Obtain a new connection...
...
return db;
}
}
問題:
的多個線程可能會試圖獲得在幾乎同一時間一個數據庫連接。當某些類保持對它們的引用時,甚至有可能多個連接共存。
這可以結合「信號量」類嗎?這樣做是否合理? – riha 2012-08-13 05:57:25