Печать "привет мир" каждые X секунд

В последнее время я использую циклы с большими номерами для печати Hello World:

int counter = 0;

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

Я понимаю, что это очень глупый способ сделать это, но я никогда не использовал никаких таймерных библиотек в Java. Как можно изменить вышеприведенное для печати каждые три секунды?

Ответ 1

Вы также можете посмотреть Timer и TimerTask, которые вы можете использовать, чтобы запланировать выполнение своей задачи каждые n секунды.

Вам нужен класс, который расширяет TimerTask и переопределяет метод public void run(), который будет выполняться каждый раз, когда вы передаете экземпляр этого класса в timer.schedule() метод.

Вот пример, который печатает Hello World каждые 5 секунд: -

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);

Ответ 2

Если вы хотите выполнить периодическую задачу, используйте 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);

Ответ 3

Попробуйте сделать это:

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

Этот код будет запускать печать в консоли Hello World каждые 5000 миллисекунд ( 5 секунд). Для получения дополнительной информации прочитайте https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html

Ответ 4

Используйте Thread.sleep(3000) для looop

Ответ 5

Я выясню это с помощью таймера, надеюсь, что это поможет. Я использовал таймер от java.util.Timer и TimerTask от того же пакета. См. Ниже:

TimerTask task = new TimerTask() {

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

Timer timer = new Timer();
timer.schedule(task, new Date(), 3000);

Ответ 6

Самый простой способ - установить основной поток для отключения 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:

Заставляет текущий исполняемый поток спать (временно прекратить выполнение) за указанное количество миллисекунд, с учетом точности и точности системных таймеров и планировщиков.

Ответ 7

Используйте метод 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);
    }
  }

Ответ 8

Что он сказал. Вы можете обрабатывать исключения, как вам нравится, но   Thread.sleep(миллисекунды); это лучший маршрут.

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

Ответ 9

Это простой способ использования потока в 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!");
}

Ответ 10

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

создается бесконечный цикл. Задача планировщика объявлений настроена.

Ответ 11

Вот еще один простой способ использования интерфейса 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();
    }
}

Ответ 12

Добавить Thread.sleep

try {
        Thread.sleep(3000);
    } catch(InterruptedException ie) {}

Ответ 13

Для небольших приложений хорошо использовать Timer и TimerTask, как упоминал Рохит, но в веб-приложениях я бы использовал Quartz Scheduler для планирования заданий и выполнять такие периодические задания.

См. tutorials для планирования кварца.

Ответ 14

public class TimeDelay{
  public static void main(String args[]) {
    try {
      while (true) {
        System.out.println(new String("Hello world"));
        Thread.sleep(3 * 1000); // every 3 seconds
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}