ScheduledThreadPoolExecutor
javadocsで推奨されているように、Timer
指定された遅延後にコマンドを実行するか、定期的に実行するようにコマンドを追加でスケジュールできる ThreadPoolExecutor 。このクラスは、複数のワーカー スレッドが必要な場合、または ThreadPoolExecutor (このクラスが拡張する) の追加の柔軟性または機能が必要な場合に、Timer よりも適しています。
public class TaskTimer {
public static void main(String[] args) {
ScheduledExecutorService svc = Executors.newScheduledThreadPool(0);
svc.schedule(new Task(svc), 2, TimeUnit.SECONDS);
}
}
class Task implements Callable<Result> {
private ScheduledExecutorService svc;
public Task(ScheduledExecutorService svc) {
this.svc = svc;
}
@Override
public Result call() throws Exception {
Result result = compute();
Task t = nextTask(result);
svc.schedule(t, 2, TimeUnit.SECONDS);
return result;
}
private Task nextTask(Result result) {
return new Task(svc);
}
private Result compute() {
System.out.println("Computing Result");
return new Result();
}
}
class Result {
}