나는이 초조한 문제가 있습니다 : TimeoutException이 코드 아래에 던져 지는지 확인하려고 시도하고 있지만 그럴 수는 없습니다. 항상 현재 시간을 5 번 인쇄하고 완료합니다. (이 for 루프를 사용하여 5 회 수행되는 것처럼) call()
방법은 적어도 5 초 정도 걸린다 그래서 Thread.sleep(1000)
사용하고FutureTask를 사용하여 시간 제한을 처리하는 방법은 무엇입니까?
class MyTask1 implements Callable<Void> {
public Void call() throws Exception {
for (int i=0; i < 5; i++) {
System.out.println(new java.util.Date());
Thread.sleep(1000);
}
return null;
}
}
public class Timeout {
public static void main(String[] args) throws Exception {
FutureTask<Void> futureTask = new FutureTask<Void>(new MyTask1());
futureTask.run();
try {
futureTask.get(1000, TimeUnit.MILLISECONDS); // Check if FutureTask completed in the given time
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
futureTask.cancel(true);
e.printStackTrace();
}
}
}
. 시간 초과 값을 1 초로 설정하여 get()
메서드로 호출합니다.
하지만 왜 TimeoutException이 발생하지 않습니까?
이
은 How do I get FutureTask to return after TimeoutException?의 가능한 중복 될하지만 정말 실망으로 사람을 도울 수 있다면 appriciate 수 있습니다. 아니면 FutureTask를 사용하여 타임 아웃을 처리하는 방법을 이해하지 못 했습니까?
실행 파일을 사용하여 문제를 해결하는 방법을 안내해 줄 수 있습니까? 죄송하지만, java.util.concurrent 패키지가 처음입니다. – ParagJ
@ParagJ - 업데이트 된 답변 – jtahlborn
감사합니다. 집행자 (Executor)를 사용하여 실행했고 매우 효과적이었습니다. 고맙습니다. – ParagJ