APIをクエリしてレポートを作成し、そのレポートを5分後に読み込みたいとします。私はそのためにScheduledExecutorService
を使用したいと思います。エグゼクティブにスレッドをブロックさせたくないので、新しいスレッドを作成していますが、これが正しい方法かどうかはわかりません。ここに私のコードは次のとおりです。新しいスレッドでスケジュールを実行する
Thread thread = new Thread() {
public void run() {
log.info("Starting...");
new RequestReport().runScheduledTask(requestId);
}
};
thread.start();
private void runScheduledTask(String requestId) {
log.info("Starting five-minute countdown now...");
ScheduledFuture<?> countdown = scheduler.schedule(() -> {
try {
new GetReportList().run(requestId);
} catch (Exception e) {
e.printStackTrace();
}
}, 5, TimeUnit.MINUTES);
try {
countdown.get();
} catch (InterruptedException | ExecutionException e) {
log.info("catched Exception");
e.printStackTrace();
}
scheduler.shutdown();
}
は、5分後に別の機能を実行するためのより良い方法はありますか?私はこれをやっているのですか?私は何を変えるべきですか?
ところで、私は春を使用しています - それを改善できるものはありますか?
Springを使用している場合は、メソッド呼び出しをスケジュールするために '@ Scheduled' [annotation](https://spring.io/guides/gs/scheduling-tasks/)を使用することもできます。 –
しかし、私はそれを動的にすることはできますか?私は5分後にタスクを実行する必要があります - 実行時間はプログラムの開始時に知られていません。 @SurajBajaj –
@ J.Doeあなたの 'while(!countdown.isDone()){}'ビジーループは本当に悪い考えです。 – Kayaman