5

スリープ機能を使用せずに 3 秒ごとにタスクを実行するループを作成する方法はありますか

例:

try {
    while (true) {
        System.out.println(new Date());
        Thread.sleep(5 * 1000);
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}

ただし、スリープ機能を使用する際の問題は、プログラムがフリーズするだけです。

このループの主な目的は、mysql データベース (オンライン) と同期することです。

4

3 に答える 3

7

使用するjava.util.TimerTask

java.util.Timer t = new java.util.Timer();
t.schedule(new TimerTask() {

            @Override
            public void run() {
                System.out.println("This will run every 5 seconds");

            }
        }, 5000, 5000);

GUI を使用している場合は、次のjavax.swing.Timer例を使用できます。

int delay = 5000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          System.out.println("This will run every 5 seconds");
      }
  };
  new javax.swing.Timer(delay, taskPerformer).start();

java.util.Timerとの違いに関する情報java.swing.Timer: http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html

それと javax.swing.Timer はどちらも同じ基本機能を提供しますが、java.util.Timer はより一般的で、より多くの機能を備えています。javax.swing.Timer には、GUI での使用を少し簡単にする 2 つの機能があります。第 1 に、そのイベント処理メタファは GUI プログラマーになじみがあり、イベント ディスパッチ スレッドの処理を少し簡単にすることができます。2 つ目は、自動スレッド共有により、スレッドの生成が多すぎるのを避けるために特別な手順を実行する必要がないことです。代わりに、タイマーは、カーソルの点滅やツール ヒントの表示などに使用されるのと同じスレッドを使用します。

于 2013-07-01T04:04:25.067 に答える
4

スレッド内で繰り返し実行したいロジックを移動してもよければ、 ScheduledExecutorServiceの実装の 1 つを使用できます。

リンクの例を次に示します。

 import static java.util.concurrent.TimeUnit.*;
 class BeeperControl {
    private final ScheduledExecutorService scheduler =
       Executors.newScheduledThreadPool(1);

    public void beepForAnHour() {
        final Runnable beeper = new Runnable() {
                public void run() { System.out.println("beep"); }
            };
        final ScheduledFuture<?> beeperHandle =
            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
        scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
    }
 }
于 2013-07-01T04:04:03.043 に答える
2

何らかのUIを使用していますか?

Java には少なくとも 2 つのタイマーが用意されています。

あなたが望むものを達成できるはずです

同様に役立つ可能性のあるサードパーティのライブラリもあります

于 2013-07-01T04:03:56.303 に答える