Перейти к содержимому
Максиметер

🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking

🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking Когда нужно отложить создание тяжёлого объекта до первого обращения, многие вспоминают double-checked locking: private volatile SomeHeavyObject obj; public SomeHeavyObject getObj() { if (obj == null) { synchronized (this) { if (obj == null) { obj = new SomeHeavyObject(); } } } return obj; } ⚠️ Многословно, хрупко, легко ошибиться. Есть лучше. 📌 Современный подход — использовать Supplier с ленивой инициализацией: private final Supplier<SomeHeavyObject> lazyObj = Suppliers.memoize(SomeHeavyObject::new); public SomeHeavyObject getObj() { return lazyObj.get(); } 💡 Suppliers.memoize — из Guava. Он гарантирует потокобезопасную инициализацию один раз при первом вызове get(). Плюсы: — Читается за секунду — Потокобезопасно — Нет дублирования кода — Легко тестировать и заменять 🔁 Альтернатива в чистой Java: использовать AtomicReference и updateAndGet, но это уже длиннее и менее выразительно. Если используешь Spring — можно просто обернуть бин в @Lazy. Но вне Spring, в обычных Java-приложениях или утилитах — Supplier с memoize() идеален. 👉 @BookJava

617 просмотров

Канал в каталоге Максиметера

1 605 подписчиков · Наука

Другие публикации канала

Популярные публикации канала

Ещё по теме «Наука»

Читать дальше

Два раза в неделю свежие посты этого канала — на почту и в личную ленту. Без повторного поиска канала вручную.