Мне часто приходится решать следующую проблему: длительная задача зависит от набора данных. Данные периодически обновляются, и задача должна быть запущена, в то же время данные могут быть обновлены. Затем задача должна начаться заново, чтобы обновить себя. Как этот шаблон называется в программировании и есть ли структурированный помощник для этого, может быть, в Гуаве?
Программно я бы сделал это так (пропущены детали фонового бега):
AtomicBoolean iAmWorking = new AtomicBoolean(false);
AtomicBoolean dataIsDirty = new AtomicBoolean(false);
public void update() {
dataIsDirty.set(true);
if(!iAmWorking.compareAndSet(false, true)) {
return;
}
while(dataIsDirty.compareAndSet(true, false)) {
doSomethingLong();
}
iAmWorking.set(false);
}