143

最近、私は印刷するために多数のループを使用していますHello World:

int counter = 0;

while(true) {
    //loop for ~5 seconds
    for(int i = 0; i < 2147483647 ; i++) {
        //another loop because it's 2012 and PCs have gotten considerably faster :)
        for(int j = 0; j < 2147483647 ; j++){ ... }
    }
    System.out.println(counter + ". Hello World!");
    counter++;
}

これが非常にばかげた方法であることは理解していますが、Java でタイマー ライブラリを使用したことはありません。上記をどのように変更して、たとえば3秒ごとに印刷しますか?

4

14 に答える 14

228

定期的なタスクを実行する場合は、ScheduledExecutorService. 具体的にはScheduledExecutorService.scheduleAtFixedRate

コード:

Runnable helloRunnable = new Runnable() {
    public void run() {
        System.out.println("Hello world");
    }
};

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(helloRunnable, 0, 3, TimeUnit.SECONDS);
于 2012-10-16T06:04:25.673 に答える
209

また、タスクを毎秒実行するようにスケジュールするために使用できるクラスをTimer確認することもできます。TimerTaskn

TimerTaskメソッドを拡張およびオーバーライドするクラスが必要です。これは、そのクラスのインスタンスをメソッドpublic void run()に渡すたびに実行されます。timer.schedule()

Hello World5 秒ごとに出力する例を次に示します。

class SayHello extends TimerTask {
    public void run() {
       System.out.println("Hello World!"); 
    }
}

// And From your main() method or any other method
Timer timer = new Timer();
timer.schedule(new SayHello(), 0, 5000);
于 2012-10-16T06:05:06.983 に答える
44

これを試してください:

Timer t = new Timer();
t.schedule(new TimerTask() {
    @Override
    public void run() {
       System.out.println("Hello World");
    }
}, 0, 5000);

このコードは、 5000ミリ秒 ( 5秒)ごとにHello Worldをコンソールに出力します。詳細については、https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.htmlを参照してください。

于 2015-07-24T06:37:31.550 に答える
17

私はタイマーでそれを理解します、それが役立つことを願っています。同じパッケージのタイマーを使用しましたjava.util.TimerTimerTask下記参照:

TimerTask task = new TimerTask() {

    @Override
    public void run() {
        System.out.println("Hello World");
    }
};

Timer timer = new Timer();
timer.schedule(task, new Date(), 3000);
于 2012-10-16T06:16:42.277 に答える
9

Thread.sleep(3000)for ループ内で使用できます。

注:これにはtry/catchブロックが必要です。

于 2012-10-16T06:02:28.003 に答える
6
public class HelloWorld extends TimerTask{

    public void run() {

        System.out.println("Hello World");
    }
}


public class PrintHelloWorld {
    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new HelloWorld(), 0, 5000);

        while (true) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                System.out.println("InterruptedException Exception" + e.getMessage());
            }
        }
    }
}

無限ループが作成され、広告スケジューラ タスクが構成されます。

于 2013-05-01T05:58:38.673 に答える
4

最も簡単な方法は、メイン スレッドを 3000 ミリ秒 (3 秒) スリープするように設定することです。

for(int i = 0; i< 10; i++) {
    try {
        //sending the actual Thread of execution to sleep X milliseconds
        Thread.sleep(3000);
    } catch(InterruptedException ie) {}
    System.out.println("Hello world!"):
}

これにより、スレッドが少なくとも X ミリ秒停止します。スレッドはより多くの時間スリープしている可能性がありますが、それは JVM 次第です。保証されている唯一のことは、スレッドが少なくともそれらのミリ秒の間スリープすることです。Thread#sleepドキュメントを見てください:

現在実行中のスレッドを、指定されたミリ秒数だけスリープ (一時的に実行を停止) させます。これは、システム タイマーとスケジューラの精度と精度に従います

于 2012-10-16T06:01:24.133 に答える
3

使用方法java.util.TimerTimer#schedule(TimerTask,delay,period)方法が役立ちます。

public class RemindTask extends TimerTask {
    public void run() {
      System.out.println(" Hello World!");
    }
    public static void main(String[] args){
       Timer timer = new Timer();
       timer.schedule(new RemindTask(), 3000,3000);
    }
  }
于 2012-10-16T06:07:04.720 に答える
1

彼が言った事。好きなように例外を処理できますが、 Thread.sleep(miliseconds); が最適なルートです。

public static void main(String[] args) throws InterruptedException {
于 2012-10-16T06:09:13.873 に答える
0

小さなアプリケーションの場合、Rohit が述べたように Timer と TimerTask を使用しても問題ありませんが、Web アプリケーションでは、Quartz Schedulerを使用してジョブをスケジュールし、そのような定期的なジョブを実行します。

Quartz スケジューリングのチュートリアルを参照してください。

于 2012-10-16T06:16:05.963 に答える
0

追加Thread.sleep

try {
        Thread.sleep(3000);
    } catch(InterruptedException ie) {}
于 2012-10-16T06:01:52.527 に答える