2016-12-19 4 views
0

Я следующее определение методаДобавление времени ожидания для метода, выполняющего несколько путей

private void pollForStatus() throws InterruptedException { 

      if (state.equals("running")) { 
       log.debug("Task still running, Polling again .."); 
       TimeUnit.SECONDS.sleep(1); 
       pollForStatus(); 
      } 

      else if (state.equals("complete")) { 
       return; 
      } 

      else if (state.equals("stopped")) { 
      { 
        // Report error state 

      } 

} 

Теперь для того, что это «pllForStatus» не держит выполнение в определенных ситуациях, я хочу добавить тайм-аут для рекурсии. Как это достигается в Java (7)?

+0

Не рекурсия должна работать в случае основания? – BiGGZ

+0

Базовый регистр, если «состояние» изменяется в вышеуказанном случае правильно? Я думал больше о том, что по какой-то причине государство застряло в состоянии «запуска», в результате чего рекурсия будет бесконечно рекурсивно –

+0

, один из подходов будет b, чтобы записать время начала потока с использованием System.currentTimeMillis, а затем рассчитать будущее время, и в каждом цикле убедитесь, что futureTime не прошел. Что-то в этом отношении – BiGGZ

ответ

0
long futureTime = System.currentTimeMillis + yourInterval; 
private void pollForStatus() throws InterruptedException { 

    if (state.equals("running")) { 
     log.debug("Task still running, Polling again .."); 
     TimeUnit.SECONDS.sleep(1); 

     //havnt reached cut off time yet, loop again 
     if(System.currentTimeMilis() < futureTime){ 
      pollForStatus(); 
     } 
    } else if (state.equals("complete")) { 
     return; 
    } else if (state.equals("stopped")) { 

     // Report error state 

    } 


}