0
1

More than 1 year has passed since last update.

【Java】タスクの遅延実行~ScheduledExecutor~

Posted at

Javaでタスクの遅延実行体験レシピ

使用するのはScheduledExecutorServiceのscheduleメソッドです。

①インスタンスの生成
Executorクラスのファクトリメソッドを使用してScheduledExecutorServiceのインスタンス生成します。

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();

②遅延実行させる処理をScheduledExecutorServiceのscheduleメソッドで指定
今回はコンソールにfinishと表示し、スレッドプールを終了させるラムダ式を1秒間遅延させて実行させます。

	System.out.println("finish");
			exec.shutdown(); //スレッドプールを閉じる
		},1,TimeUnit.SECONDS);

③完成コード&実行結果
以下の例では、while文で0.1秒ごとに秒数を出力し続け、execスレッドがShutdownしたら実行を終了するという処理を付け加えてます。

class Main {
	public static void main(String[] args) {
		//インスタンスの生成
		ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
		exec.schedule(() -> {
			System.out.println("finish");
			exec.shutdown(); //スレッドプールを閉じる
		}, 1, TimeUnit.SECONDS);
		int count = 0;
		while (true) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			}
			if (exec.isShutdown()) {
				break;
			}
			System.out.println((++count) * 100 + " ms");
		}
	}
}

新しいスレッドが生成&実行されるものの1秒間待機し、その間に100,200,300...とカウントアップ
そして1秒間経過したタイミングでコンソールに「finish」と表示され、execスレッドがシャットダウン。
それにより、while文もbreakとなります。
image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1