33

特定の時間にJavaでメソッドを呼び出すことは可能ですか? たとえば、次のようなコードがあります。

class Test{

    public static void main(String args[]) {
        // here i want to call foo at : 2012-07-06 13:05:45 for instance
        foo();
    }
}

これはJavaでどのように行うことができますか?

4

9 に答える 9

56

java.util.Timerクラスを使用して、タイマーを作成し、特定の時間に実行するようにスケジュールできます。

以下に例を示します。

//The task which you want to execute
private static class MyTimeTask extends TimerTask
{

    public void run()
    {
        //write your code here
    }
}

public static void main(String[] args) {

    //the Date and time at which you want to execute
    DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = dateFormatter .parse("2012-07-06 13:05:45");

    //Now create the time and schedule it
    Timer timer = new Timer();

    //Use this if you want to execute it once
    timer.schedule(new MyTimeTask(), date);

    //Use this if you want to execute it repeatedly
    //int period = 10000;//10secs
    //timer.schedule(new MyTimeTask(), date, period );
}
于 2012-07-06T11:31:14.413 に答える
17

「 /の組み合わせのより用途の広い代替品」であるScheduledExecutorServiceを使用できます(の javadocによると):TimerTimerTaskTimer

long delay = ChronoUnit.MILLIS.between(LocalTime.now(), LocalTime.of(13, 5, 45));
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
于 2012-07-06T11:33:35.020 に答える
7

それは可能であり、 http: //quartz-scheduler.org/などのライブラリを使用します。

Quartz は、最小のスタンドアロン アプリケーションから最大の e コマース システムまで、ほぼすべての Java EE または Java SE アプリケーションと統合したり、一緒に使用したりできる、フル機能のオープン ソース ジョブ スケジューリング サービスです。Quartz を使用して、数万、数百、さらには数万のジョブを実行するための単純または複雑なスケジュールを作成できます。タスクが標準の Java コンポーネントとして定義されているジョブは、プログラムで実行できることは事実上すべて実行できます。

于 2012-07-06T11:30:52.730 に答える
4

私が知っているように、これにはQuartz-schedulerを使用できます。まだ使っていませんが、多くの人に勧められています。

于 2012-07-06T11:32:16.107 に答える
2

SE について話している場合、Java 5 以降で利用可能なhttp://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.htmlを探しているのは Timer クラスかもしれません。

アプリケーションサーバーのコンテキストで何かを計る必要がある場合は、EJB タイマーhttp://www.javabeat.net/2007/03/ejb-3-0-timer-services-an-overview/を参照することをお勧めします。 EJB 3.0。

または、実際に何をしようとしているのかによって、cron ジョブ (またはその他の OS ベースのタイマー メソッド) を使用する方が適しているかどうかを詳しく説明することもできます。時間。

于 2012-07-06T11:34:44.187 に答える
2

可能です。Timerとを使用して、ある時点でメソッドをスケジュールできますTimerTask

例えば:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);

Date alarmTime = calendar.getTime();

Timer _timer = new Timer();
_timer.schedule(foo, alarmTime);

次のリンクを参照してください。

于 2012-07-06T11:34:47.220 に答える
2

クラスTimerを使用できます

ドキュメントから:

バックグラウンド スレッドでの将来の実行のためにスレッドがタスクをスケジュールするための機能。タスクは、一度だけ実行するようにスケジュールすることも、一定間隔で繰り返し実行するようにスケジュールすることもできます。

メソッドschedule(TimerTask task, Date time)はまさにあなたが望むものです。指定されたタスクを指定された時間に実行するようにスケジュールします。

cron形式でスケジュールが必要な場合は、クォーツが良い解決策になります。(クオーツクロン様予定)

于 2012-07-06T11:31:36.303 に答える
2

java.util.Timerの簡単なデモ

Timer t=new Timer();
t.schedule(new TimerTask() {
    public void run() {
        foo();
    }
}, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2012-07-06 13:40:20"));
于 2012-07-06T11:42:32.600 に答える