web-dev-qa-db-ja.com

X秒ごとに "hello world"を印刷する

最近私は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秒ごとに印刷するように上記を変更する方法

113
meiryo

また、 Timer および TimerTask クラスを見て、タスクをn秒ごとに実行するようにスケジュールすることもできます。

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

これは、5秒ごとにHello Worldを出力する例です。 -

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);
165
Rohit Jain

定期的なタスクを実行したい場合は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);
180
Tim Bender

これをやってみてください。

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

このコードはコンソールに印刷を実行しますHello World every 50ミリ秒(5秒)。詳細については、 https://docs.Oracle.com/javase/1.5.0/docs/api/Java/util/Timer.html を参照してください。

31
user4475555

私はタイマーでそれを把握し、それが役立つことを願っています。同じパッケージの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);
13
tmwanik

ループの内側にThread.sleep(3000)を使用

9
saum22
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());
            }
        }
    }
}

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

4
Vicky

最も簡単な方法は、メインスレッドを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 docを見てください。

現在実行中のスレッドを、指定されたミリ秒数の間スリープさせます(= /// =)。システムタイマーとスケジューラの正確さと正確さによります

3
Luiggi Mendoza

Java.util.TimerおよびTimer#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);
    }
  }

これはJavaでスレッドを使う簡単な方法です:

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

これはThread ConstructorでRunnableインターフェースを使うもう一つの簡単な方法です

public class Demo {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {

            @Override
            public void run() {
                for(int i = 0; i < 5; i++){
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Thread T1 : "+i);
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {

            @Override
            public void run() {
                for(int i = 0; i < 5; i++) {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Thread T2 : "+i);
                }
            }
        });

        Thread t3 = new Thread(new Runnable() {

            @Override
            public void run() {
                for(int i = 0; i < 5; i++){
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("Thread T3 : "+i);
                }
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}
1
Mayur Chudasama

彼が言ったこと。必要に応じて例外を処理できますが、Thread.sleep(milliseconds);最適なルートです。

public static void main(String[] args) throws InterruptedException {
1
leigero