Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@yacchi1123

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

はじめに

今回は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技術情報や業界情報、エンジニアライフハック等のコンテンツを配信していく予定です。

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

15
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
15
Help us understand the problem. What is going on with this article?