Разработать и реализовать [b]потокобезопасный кэш в памяти[/b] на Java со следующими функциями: [list] [*]Каждая запись должна иметь [b]время жизни (TTL)[/b], после которого срок ее действия автоматически истекает
[*]Поддержка put(key, value, ttl) и get(key) операций
[*][code]get()[/code] должен выполняться за время [b]O(1)[/b]
[*]Несколько потоков должны иметь возможность читать и писать [b]одновременно[/b]
[*]Просроченные записи должны быть очищены [b]без блокировки[/b] обычных операций
private final Map cache = new HashMap(); private final ScheduledExecutorService cleaner = Executors.newSingleThreadScheduledExecutor();
public BrokenTTLCache() { cleaner.scheduleAtFixedRate(this::cleanUp, 0, 1, TimeUnit.MILLISECONDS); }
public void put(K key, V value, long ttlMillis) { long expiryTime = System.currentTimeMillis() + ttlMillis; cache.put(key, new CacheItem(value, expiryTime)); }
public V get(K key) { CacheItem item = cache.get(key); if (System.currentTimeMillis() > item.expiryTime) { cache.remove(key); return null; } return item.value; }