私はこのようなコードを持っています:
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
。
何らかのシンクロナイザーを使って、タスクが終了するまでメソッドを待機させることを考えていますが、どちらがうまく機能するかわかりません。私が必要とすることを行うための別のより良い方法があるかもしれません。
タスクのインスタンスは 1 つだけで、重要な場合はキャンセル後に再スケジュールできます。