Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでタイマースレッドを実装する方法|Timerクラスの使い方を解説

JavaのTimerクラスは、指定した時刻にタスクを1回だけ、または繰り返し実行するようスケジュールするためのクラスです。デーモンスレッドとしてバックグラウンドで動作させることも可能で、その場合はboolean値を受け取るコンストラクタを使用します。

Timerはタスクを固定遅延(fixed delay)固定レート(fixed rate)という2つの方式でスケジュールできます。それぞれの動作の違いは以下の通りです。

固定遅延(fixed delay)の場合

ある実行がSystem GCなどの影響で遅延すると、それ以降の実行もすべて連鎖的に遅延し、各実行は直前の実行時刻を基準として遅れていきます。

固定レート(fixed rate)の場合

ある実行がSystem GCによって遅延しても、最初の実行開始時刻を基準とした固定レートを維持しようとするため、2〜3回の実行が連続して行われることがあります。

また、Timerクラスにはタイマーをキャンセルするためのcancel()メソッドが用意されています。このメソッドを呼び出すとタイマーは終了します。なお、Timerクラスが実行できるのは、TimerTaskを実装したタスクのみである点にも注意してください。

サンプルコード

import java.util.*;
public class TimerThreadTest {
    public static void main(String []args) {
        Task t1 = new Task("Task 1");
        Task t2 = new Task("Task 2");
        Timer t = new Timer();
        t.schedule(t1, 10000); // 10秒後に1回実行
        t.schedule(t2, 1000, 2000); // 1秒後から2秒ごとに実行
    }
}
class Task extends TimerTask {
    private String name;
    public Task(String name) {
        this.name = name;
    }
    public void run() {
        System.out.println("[" + new Date() + "] " + name + ": task executed!");
    }
}

実行結果

[Thu Aug 01 21:32:44 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:46 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:48 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:50 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:52 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:53 IST 2019] Task 1: task executed!
[Thu Aug 01 21:32:54 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:56 IST 2019] Task 2: task executed!
[Thu Aug 01 21:32:58 IST 2019] Task 2: task executed!
[Thu Aug 01 21:33:00 IST 2019] Task 2: task executed!
  1. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー

  2. JavaのJWindowを使ってスプラッシュ画面を実装する方法

    JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ