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となります。