Допустимо ли использование этого слова в конструкторе?
Это будет работать, но неразумно и едва читаемо. Это больше похоже на запах кода.
Есть ли даже существенная разница по сравнению с обычным способом?
Читаемость и ремонтопригодность всегда должны учитываться. Будет сложнее издеваться и / или использовать этот синглтон, потому что его реализация имеет вид unique .
Также, как указано в комментариях. Ни один из примеров не является поточно-ориентированным. Означает, что это не true singleton.
Если вам нужен потокобезопасный синглтон с отложенной инициализацией, я бы предложил реализовать его следующим образом:
public class Singleton {
private static Singleton unique = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (unique == null) {
unique = new Singleton();
}
return unique;
}
}
Вы можете улучшить его, введя двойную проверку блокировки:
public static synchronized Singleton getInstance() {
if (unique == null) {
synchronized (Singleton.class) {
if (unique == null) {
unique = new Singleton();
}
}
}
return unique;
}
Дополнительная информация
Существует несколько способов реализации шаблона Singleton:
https://www.geeksforgeeks.org/java-singleton-design-pattern-practices-examples/