ИМХО Сначала вы должны начать с самых простых вариантов.Самый простой синглтон - это перечисление с одной записью.Учитывая, что классы загружаются лениво, это все равно даст вам ленивую загрузку, если только вы не обращаетесь к классу напрямую, и это не случайно происходит легко.
enum Singleton {
INSTANCE;
}
Чтобы избежать случайной загрузки, вы можете использовать внутреннийкласс.
class Singleton {
static class SingeltonHolder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
Примечание;ни одно из решений не нуждается в синхронизации, поскольку они используют тот факт, что загрузка классов является поточно-ориентированной.
Короче говоря;Есть ситуации, когда требуется блокировка, но не усложняйте ее.