Нет, конструкторы в Java не могут быть отмечены как synchronized. Попытка это сделать приведёт к ошибке компилятора.
Фундаментальная причина этого ограничения связана с доступностью объекта во время конструирования:
Если тебе нужна потокобезопасная инициализация объекта, рассмотри эти альтернативы:
synchronized методы на уровне класса в качестве фабричных методовdouble-checked locking со статическими фабрикамиfinal-полями// Это НЕ скомпилируется
public synchronized MyClass() {
// Код конструктора
}
// Лучший подход: синхронизированный фабричный метод
public static synchronized MyClass createInstance() {
return new MyClass();
}
Главный вывод: синхронизация на уровне конструктора избыточна, потому что вновь созданный объект остаётся привязан к создающему потоку до тех пор, пока конструктор не завершится и ссылка на объект не будет безопасно опубликована.
Конструктор не может быть помечен как synchronized, потому что только создающий объект поток имеет доступ к новому объекту до завершения конструктора.
Новый — ещё не проверен сообществом
Вы