Справка по таймеру Java?

#java #timer

#java #таймер

Вопрос:

Мне нужно создать таймер с java, который запускается бесконечное количество раз, мне нужно, чтобы таймер запускался каждые 2 секунды, как бы я это сделал?

Комментарии:

1. бесконечное время? Ты пробудешь здесь какое-то время!

2. Google Java Timer предоставляет вам класс Timer на Java, почему бы не использовать это? download.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html

3. @Roy Я пытался это сделать, но у меня ничего не вышло, я попытался выполнить: Timer timer = new Timer(2000, new TimerHandler()); , но это выдало мне ошибку, которую я не смог исправить самостоятельно.

4. Ну, честно говоря, Java Timer чрезмерно сложен по сравнению с C #, но MacroS дает хороший пример, и в руководстве Java Timer также было бы приведено множество хороших примеров.

Ответ №1:

Вы можете использовать ScheduledExecutorService

 ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); 
ses.scheduleAtFixedRate(new Runnable() {
    public void run() {
        // do something.
    }
}, 0, 2, TimeUnit.SECONDS);
  

Ответ №2:

Вы можете использовать scheduleAtFixedRate()

 long delay = 1000;
long period = 2000;
Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            // Task here ...
        }
    }, delay, period);
  

Комментарии:

1. ScheduledExecutorService это лучший вариант. Прочтите это , и вы поймете почему.

2. Я не понимаю, почему. Не могли бы вы, пожалуйста, добавить краткое объяснение?

3. Если выполнение задачи занимает больше времени, чем period , последующие задачи начнут вставать в очередь, и как только эта задача завершится, эти задачи, поставленные в очередь, будут запускаться в быстрой последовательности и вызывать неустойчивое поведение. Этого не происходит с ScheduledExecutorService .

4. @sthupahsmaht: Понятно. Спасибо, что объяснили это. Я должен помнить это на будущее!

Ответ №3:

 public class Timer implements Runnable {

public static void main(String args[]) {
    Timer t = new Timer();
    t.run();
}

public void run() {
    while (true) {
        //do something cool            
       try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {
            //handle interrupt
        }
    }
}
  

}

Что-то вроде этого?

Ответ №4:

Я использовал quartz раньше для аналогичной функциональности, и у меня это хорошо работало.