Найти в Дзене
Java

🧩 Java‑задача для тех, кто не боится `Concurrency` и `Immutable

🧩 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?

@javarush