Как я могу сделать это в 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);
Оформить заказ в классе 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
}
}
void method() {
long endTimeMillis = System.currentTimeMillis() + 10000;
while (true) {
// method logic
if (System.currentTimeMillis() > endTimeMillis) {
// do some clean-up
return;
}
}
}