В последнее время для распечатки я использую циклы с большими числами 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 секунды?
Ответы:
Вы также можете посмотреть на
Timer
иTimerTask
классы , которые вы можете использовать , чтобы запланировать задачу для запуска каждыеn
секунд.Вам нужен класс, который расширяет
TimerTask
и переопределяетpublic void run()
метод, который будет выполняться каждый раз, когда вы передаете экземпляр этого классаtimer.schedule()
методу.Вот пример, который печатается
Hello World
каждые 5 секунд: -источник
schedule
будет выполняться один раз после указанной задержки. Необходимо использовать 3 параметраschedule
илиscheduleAtFixedRate
.ExecutorService
для этих задач. Это действительно большое улучшение по сравнению с традиционным Thread API. Просто не использовал его на момент ответа.Timer timer = new Timer(true);
должен быть установленtrue
как deamon. Если вы не хотите, чтобы таймер продолжал работать после закрытия приложения.Если вы хотите выполнять периодическую задачу, используйте файл
ScheduledExecutorService
. В частности, ScheduledExecutorService.scheduleAtFixedRateКод:
источник
TimerTask
вариант. Интересно, что я заметил, что принятый ответ на самом деле неверен: \ Возраст двух API в стороне,ScheduledExecutorService
просто более интуитивно декларативен. ИспользованиеTimeUnit
в качестве параметра делает более понятным, что происходит. Прошли те времена, когда код был похож5*60*1000 // 5 minutes
.Runnable helloRunnable = () -> { /*code */ };
что-то еще красивее;)Попробуйте сделать это:
Этот код будет запускать печать на консоли Hello World каждые 5000 миллисекунд ( 5 секунд). Для получения дополнительной информации прочтите https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html.
источник
Разбираюсь с таймером, надеюсь поможет. Я использовал таймер из одного
java.util.Timer
иTimerTask
того же пакета. Увидеть ниже:источник
Вы можете использовать
Thread.sleep(3000)
внутри цикла for.Примечание: для этого потребуется
try/catch
блок.источник
создан бесконечный цикл, настроена задача планировщика объявлений.
источник
Самый простой способ - перевести основной поток в спящий режим на 3000 миллисекунд (3 секунды):
Это остановит поток как минимум на X миллисекунд. Поток может спать больше времени, но это зависит от JVM. Гарантируется только то, что поток будет спать по крайней мере эти миллисекунды. Взгляните на
Thread#sleep
документ:источник
Использование
java.util.Timer
иTimer#schedule(TimerTask,delay,period)
метод помогут вам.источник
Это простой способ использовать поток в java:
источник
Что он сказал. Вы можете обрабатывать исключения как хотите, но Thread.sleep (миллисекунды); это лучший маршрут.
источник
Вот еще один простой способ использования интерфейса Runnable в Thread Constructor
источник
Добавить
Thread.sleep
источник
Для небольших приложений можно использовать Timer и TimerTask, как упоминал Рохит, но в веб-приложениях я бы использовал Quartz Scheduler для планирования заданий и выполнения таких периодических заданий.
См. Руководства по планированию Quartz.
источник
источник