我有这样的代码:
public class SomeClass
{
private ScheduledExecutorService executor;
private ScheduledFuture<?> future;
private Set<String> keys;
private ConcurrentMap<String, Something> map;
public void startTask()
{
future = executor.scheduleWithFixedDelay(new SomeTask(), ...);
}
public void stopTask()
{
future.cancel(true);
map.clear();
}
private class SomeTask implements Runnable
{
@Override
public void run()
{
for (String key : keys)
{
if (Thread.interrupted())
{
break;
}
// Getting value...
map.put(key, value);
}
}
}
}
我想确保退出map
时它是空的。
我正在考虑通过使用一些同步器让该方法等到任务退出,但是,我不确定哪个会更好。也可能有另一种更好的方法来做我需要的事情。stopTask
该任务只有一个实例,如果重要,可以在取消后重新安排。