Это образец базового шаблона, который я использовал для Factory, который возвращает потокобезопасный Singleton:
public class UserServiceFactory {
private volatile static UserService userService;
private UserServiceFactory() { }
public static UserService getInstance() {
if (userService == null) {
synchronized(UserServiceImpl.class) {
if (userService == null) {
userService = new UserServiceImpl();
}
}
}
return userService;
}
}
Он использует как volatile, так и идиому двойной проверки, чтобы гарантировать, что один экземпляр создан и виден в потоках.
Есть ли менее подробный и/или менее дорогостоящий способ достижения той же цели в 1.6 +.