#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 раньше для аналогичной функциональности, и у меня это хорошо работало.