Тайм-аут для функции

1

Как я могу сделать это в java? Или, чтобы быть более постоянным, я хотел бы сделать тайм-аут для моей функции.

Псевдокод:

public String aLotOfWork()
{
    return hardWork(); 

    if(hardWork() is still executing after 30 seconds)
           return "TimeOut";


}

Я могу использовать TimerTask для этого, но я не могу вернуть какое-либо значение из задачи выполнения таймера() в свою верхнюю функцию

TimerTask task = new TimerTask() {
    public void run() 
    {
        return ""; // timerTask run must be void.
    }
};
Timer timer = new Timer();
timer.schedule(task, 50000, 1);
Теги:

2 ответа

4
Лучший ответ

Оформить заказ в классе FutureTask. Он предоставляет метод, называемый get(timeout, timeUnit). Off загрузить hardwork задачу на FutureTask класса

public String aLotOfWork() {

  FutureTask task = new FutureTask<String>(new Callable<String>() {

    public String call() {
       return hardwork();
    }
  });

  try {
     return task.get(30, TimeUnit.SECONDS);
  } catch(TimeoutException e) {
     return "Timeout";
  }
  catch(Exception e) {
     return "Timeout"; // or whatever you like
  }

}
  • 0
    Кажется, работает. Очень хорошее решение. Спасибо !
0
void method() {
    long endTimeMillis = System.currentTimeMillis() + 10000;
    while (true) {
        // method logic
        if (System.currentTimeMillis() > endTimeMillis) {
            // do some clean-up
            return;
        }
    }
}
  • 0
    Это создаст большую нагрузку на процессор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню