🧩 Java‑задача для тех, кто не боится `Concurrency` и `Immutable`
Представьте, что вы пишете in-memory кеш конфигураций. У вас есть ConfigService, который должен:
🔹 Загружать конфигурации из базы (эмулируется `loadConfigFromDB()`)
🔹 Раздавать *текущую* версию конфигурации многопоточным клиентам
🔹 Давать 100% thread‑safety и 0 блокировок
🔹 Позволять hot‑reload без блокировки клиентов
🔹 Гарантировать, что ни один поток никогда не увидит "смешанную" конфигурацию
🔧 Что нужно сделать:
Реализуйте ConfigService, который использует AtomicReference<Config> и `Immutable`-объекты, чтобы:
1. Конфигурация всегда была консистентной
2. Потоки не блокировали друг друга
3. Обновления конфигурации были моментальными и безопасными
📦 Пример API:
class ConfigService {
public Config getCurrentConfig(); // read-only, вызывается часто
public void reload(); // обновить конфиг, редко
}
🧠 Хитрость: нельзя использовать synchronized, volatile массивы, CopyOnWrite, ReentrantLock, и т.п. — только атомарность и неизменяемость.
🚀 Challenge accepted?