Предположим, у меня есть следующий (псевдо) код:
class Cache {
Entry addIfMissing(String data) {
// omitted for brevity
}
void evictOldEntries() {
// omitted for brevity
}
}
class Program {
private Cache cache = new Cache();
doWork() { // called from multiple threads
var entry = cache.addIfMissing("omitted for brevity");
// work with entry
}
static {
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
cache.evictOldEntries();
}, 10, 10, TimeUnit.MINUTES);
}
}
Я хочу убедиться, что во время работы метода evictOldEntries
все остальные потоки в программе должны ждать, пока это будет сделано.
Какой механизм синхронизации подойдет для такого сценария?