14
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】定期的にタスクを実行する方法

Last updated at Posted at 2018-11-14

はじめに

今回はJavaで定期的にタスクを実行する方法を解説します。
本機能はバッチ処理でよく使用されます。

サンプルではTimerクラスを利用し、定期的にタスクを実行する処理を実装していきます。

それでは早速解説していきます。

1. 開発環境

以降、以下のバージョン、環境での解説となります。

IDE:eclipse
Javaバージョン:8

2. フォルダ構成

今回のサンプルプログラムのフォルダ構成は以下の通りです。
スクリーンショット 2018-11-14 21.02.27.png

3. サンプルプログラムの実装

3-1. 定期的に実行したいタスクの実装

定期的に実行したいタスクはTimerTaskクラスを使用して実装します。
今回、「タスクが実行されました。」と定期的にコンソールに出力する処理をサンプルで実装していきます。

Main.java
package main;
// 今回追加する部分
import java.util.TimerTask;

public class Main {
    public static void main(String[] args) {
        // 今回追加する部分
        TimerTask task = new TimerTask() {
            public void run() {
                //定期的に実行したい処理
                System.out.println("タスクが実行されました。");
            }
        };
    }
}

また、何回実行したか確認するために、以下のように回数がわかるように実装してみましょう。

Main.java
package main;

import java.util.TimerTask;

public class Main {
    public static void main(String[] args) {

        TimerTask task = new TimerTask() {
            int count = 0; // 今回追加する処理
            public void run() {
                // 定期的に実行したい処理
                count++; // 今回追加する処理
                System.out.println(count + "回目のタスクが実行されました。"); // 今回修正する処理
            }
        };
    }
}

3-2. スケジュールの実装

次に、いつタスクを実行開始し、どのぐらいの間隔でタスクを実行するのか実装していきます。

実装方法ですが、TimerクラスのscheduleAtFixedRateメソッドを使用します。
使い方は以下の通りです。

Timer timer = new Timer();
timer.scheduleAtFixedRate(定期的に実行したいタスク,初回のタスク実行までの時間(ms),実行するタスクの間隔(ms));

scheduleAtFixedRateメソッドの第二引数ですが、「初回のタスク実行までの時間」だけでなく、「タスク開始時間」をDate型で指定することもできます。

今回のサンプルでは、PGM実行後、1秒後に3秒間隔でタスクが実行されるような処理を実装していきます。

Main.java
package main;

import java.util.Timer; // 今回追加する処理
import java.util.TimerTask;

public class Main {
    public static void main(String[] args) {

        Timer timer = new Timer(); // 今回追加する処理
        TimerTask task = new TimerTask() {
            int count = 0;
            public void run() {
                // 定期的に実行したい処理
                count++;
                System.out.println(count + "回目のタスクが実行されました。");
            }
        };
        timer.scheduleAtFixedRate(task,1000,3000); // 今回追加する処理
    }
}

上記実装完了しましたら、Main.javaを右クリック>Javaアプリケーションの実行で実行してみましょう。

以下のような文言が3秒間隔でコンソールに出力されればOKです。

コンソール
1回目のタスクが実行されました。
2回目のタスクが実行されました。
3回目のタスクが実行されました。
4回目のタスクが実行されました。
・・・

さいごに

2020年から個人ブログはじめました!

フリーランスエンジニアになって得た知識と経験をもとに、フリーランスエンジニアに関する情報をはじめ、IT技術情報や業界情報、エンジニアライフハック等のコンテンツを配信していく予定です。

まだまだ記事数は少ないのですが、週単位で更新してますので、もしご興味ございましたら、みていただけると嬉しいです。

14
20
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
14
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?