- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
public static DBFactory getInstance() throws SQLException
{
synchronized (DBFactory.class)
{
if (_dbinstance == null)
_dbinstance = new DBFactory();
}
return _dbinstance;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+78
public static DBFactory getInstance() throws SQLException
{
synchronized (DBFactory.class)
{
if (_dbinstance == null)
_dbinstance = new DBFactory();
}
return _dbinstance;
}
Серийный и беспощадный доступ к инстансу ДБ-Фэктори -_-
Причем, данный код фурычит в многопоточной среде, где порой по 20-30 потоков одновременно обращаются к Фэктори, чтобы взять коннект с пула.
sayidandrtfm 27.05.2011 19:32 # +2
Lure Of Chaos 28.05.2011 23:55 # 0
ingenuus 29.05.2011 00:03 # 0
Lure Of Chaos 29.05.2011 00:35 # 0
Eugene 30.05.2011 07:51 # +1
но она тоже не работает, т.к. компилятор может поменять порядок инициализации DBFactory и _dbinstance.
Как написано тут: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
There is no way to make it work without requiring each thread that accesses the helper object to perform synchronization.
Лучше использовать
т.к. в этом случае инициализация гарантирована самой средой
VirtualVoid 30.05.2011 12:16 # 0
А иначе точно каша получится.
Но тем не менее это нонсенс, синглтоны как раз для этой задачи.
VirtualVoid 29.05.2011 00:38 # 0
Такую задачу проще решить с применением синглтона, чем проверкой-созданием экземпляра.
Skipy 30.05.2011 16:12 # 0
guest8 09.04.2019 10:50 # −999