Выполнить код на х секунд в Java? - PullRequest
24 голосов
/ 08 января 2010

Я хотел бы написать цикл Java, который будет повторяться в течение 15 секунд. Один из способов сделать это - сохранить текущее системное время + 15 секунд, а затем сравнить его с текущим временем в сигнатуре цикла while.

Есть ли лучший способ?

Ответы [ 12 ]

0 голосов
/ 08 января 2010

Вас может заинтересовать планирование TimerTask, которое останавливает другой поток или изменяет условие вашего цикла.

0 голосов
/ 08 января 2010

Предполагая, что вы хотите, чтобы цикл делал что-то разумное, вы можете быстрее проверить флаг volatile. Пусть другой поток подождет 15 секунд (или использует таймер), а затем установит его.

В качестве альтернативы, если вы приблизительно знаете, сколько времени займет тело цикла, запустите его, скажем, несколько сотен раз и выполните проверку времени во внешнем цикле.

final long start = System.nanoTime();
do {
    for (int i=0; i<200, ++i) {
        ...
    }
} while (System.nanoTime()-start < 15L*1000L*1000L*1000L);

System.nanoTime должно не запутаться из-за изменений системных часов. Важно использовать длинные буквенные числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...