1

説明

タスク A が実行されており、2 秒から 60 秒以上かかることがあります。

A の実行中に、10 秒 (遅延) 後に 5 秒ごと (固定レート) に「実行中」と出力される ExecutorService をスケジュールしました。

ScheduledExecutorService scheduleNotifications = Executors
        .newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

Aが完了したら、「Aが完了しました」と出力したいと思います。ただし、ScheduledExecutorService タスクが開始された場合のみ、つまり少なくとも 1 回は「実行中」と出力されます。

  • A が 10 秒前に終了した場合、何も印刷しません。
  • A に 10 秒以上かかる場合は、5 秒ごとに「実行中」と出力し、A が終了したら「完了」と出力します。

schduled 内でブール値フラグを使用せずに、どうすればそれを行うことができますかrunnable。サービスが開始されたことを確認する方法はありますか?

4

1 に答える 1

2
ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

Thread.sleep(20000);
scheduler.shutdown();
if (scheduler.getCompletedTaskCount() > 0) {
    System.out.println("A is done.");
}
于 2013-11-08T05:19:53.940 に答える