Запуск метода / функции в течение указанного времени - PullRequest
2 голосов
/ 31 декабря 2011

Я ищу простой способ выполнить метод / функцию в течение указанного времени в Java. Нечто подобное:

for(3 secs){
   x();
}

Способ должен быть простым в реализации и иметь хорошую производительность.

Ответы [ 3 ]

4 голосов
/ 31 декабря 2011
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime <= 3000){
  x();
}

+ 1 для ответа Аарона, используя вместо этого long finishTime = System.currentTimeMillis() + 3000, перемещая сложение / вычитание за пределы цикла, оставляя только сравнение эффективности / производительности.

Обратите внимание, что, как только вывведите x (), и если x () занимает некоторое время, общий цикл может выполняться дольше, чем вы хотите.Если x () - это длина, вы также можете добавить проверки для условия остановки в нем.

3 голосов
/ 31 декабря 2011

Я бы сделал

long finishTime = System.currentTimeMillis()+3000;
while(System.currentTimeMillis() <= finishTime){
  x();
}

, чтобы вывести арифметику за пределы цикла для эффективности / производительности

1 голос
/ 31 декабря 2011
void run ( Runnable task , long milliseconds ) throws Exception
{
       new Thread ( )
       {
              public void run ( ) 
              {
                     while ( true )
                     {
                              task . run ( ) ;
                     }
              }
       } . start ( ) ;
       Thread . sleep ( milliseconds ) ;
       System . exit ( 0 ) ;
}

Это будет работать, даже если задача занимает больше времени, чем выделено.

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