因为我没有发现涉及此主题的问题,所以我想我会将我的解决方案分享给以下方案。答案可能很明显,但我花了很长的路要找出答案。 :)我会很感激问题和答案以及其他解决方案的反馈。在惰性加载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