我经常要解决以下问题:长时间运行的任务取决于一堆数据。数据偶尔会更新,因此必须开始执行任务,同时可能会更新数据。然后,任务必须重新开始以更新自身。在编程中如何调用此模式?番石榴中是否有结构化的帮助程序?
通过编程,我会这样做(省略了后台运行详细信息):
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);
}