質問

説明

タスクAは実行されています。これは2秒から60+sまで続くことがあります。

Aが実行されている間、私は10S(遅延)が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タスクが開始された場合のみです, 、それが少なくとも一度は「ランニング」を印刷したことを意味します。

  • 10代前に終了した場合、私は何も印刷しません。
  • Aが10を超える場合、Aが終了したら5秒ごとに「実行中」を印刷し、「実行」します。

Schduled内のブールフラグを使用せずにそれを行うにはどうすればよいですか runnable. 。私のサービスが始まったことを確認する方法はありますか?

役に立ちましたか?

解決

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.");
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top