3

私はJavaベースのシェルタイプを書いています...ええと..もの。とにかく、私が実装しているコマンドの 1 つはコマンドです。コマンドscheduleを実行する時刻を指定すると、その時刻を待ち、コマンドを 1 回実行して終了します。ただし、時間を確認する方法がわかりません-日付が等しいかどうかを確認するだけのものを実装し、より良い解決策が存在するかどうかを少し調査したところ、明らかDateに良いことではないことがわかりました使用する。私は何をすべきか?

MCVE:

import java.util.Date;

public class Scheduler extends Thread {
    private Date goAt;
    private String command;
    public Scheduler(Date goAt, String command) {
        this.goAt = goAt;
        this.command = command;
    }
    public void start() {
        super.start();
    }
    public void run() {
        while (!goAt.equals(new Date())) {} //Wait until the dates are equal
        runCommand(command); //In the real thing, this runs the command.
    }
    public void runCommand(String command) {
        System.out.println("Command: " + command);
    }
    public static void main(String[] args) {
        Scheduler task = new Scheduler(new Date(System.currentTimeMillis() + 5000));
        task.start();
    }
}

サードパーティのライブラリ、または個別にダウンロードする必要があるライブラリを使用せずにこれを実行したいと考えています。そうする方法がない場合は、サードパーティのライブラリを使用して回答を受け入れますが、サードパーティのライブラリを使用しないソリューションが優先されます。また、相対時間差を計算してそれを使用するのではなく、答えがコマンドを実行する時間を直接指定できるようにすることも理想的です。

4

2 に答える 2

2

組み込みjava.util.Timerクラスを使用して、特定の将来の時間または特定の遅延後にコードを実行するようにスケジュールします。

于 2013-05-09T14:17:04.700 に答える
0

1 つのオプションは、Timers / TimerTasksを使用してコマンドをスケジュールすることです。ここにチュートリアルがあります。

もう 1 つのオプションは、コマンドをDelayQueuetake (タスクが起動する時間に設定された遅延) に配置し、コンシューマー スレッドを使用してキューを繰り返し呼び出し、削除されたコマンドを起動することです。

サードパーティのライブラリに関しては、Quartzが優れたスケジューラです。

于 2013-05-09T14:16:40.607 に答える