Мы имели шаблоны проектирования в школе и научились реализации одноточечного (ленивый/не Потокобезопасные один), как это:Ленивого Singleton какие преимуществ над Потокобезопасными один
package com.crunchify.tutorials;
public class CrunchifySingleton {
private static CrunchifySingleton instance = null;
protected CrunchifySingleton() {
}
// Lazy Initialization (If required then only)
public static CrunchifySingleton getInstance() {
if (instance == null) {
// Thread Safe. Might be costly operation in some case
synchronized (CrunchifySingleton.class) {
if (instance == null) {
instance = new CrunchifySingleton();
}
}
}
return instance;
}
}
Теперь я нашел реализацию, как это:
package com.crunchify.tutorials;
public class ThreadSafeSingleton {
private static final Object instance = new Object();
private ThreadSafeSingleton() {
}
// Runtime initialization
// By defualt ThreadSafe
public static Object getInstance() {
return instance;
}
}
Теперь мне интересно, когда первая реализация имеет смысл использовать, потому что в соответствии с http://crunchify.com/thread-safe-and-a-fast-singleton-implementation-in-java/ второй является поточно и требует меньше линий.
Да, но второй не ленив. – Kayaman
@ Кайаман: В чем преимущество, когда синглтон ленив, а не потокобезопасен? Это то, чего я не получаю. Спасибо за ваш ответ! – Gildraths
Число раз, когда одноэлемент действительно необходим, очень мало; количество раз, на которое вам действительно нужен лениво-инициализированный ленивый синглтон, еще меньше. –