자바에서는 TimeoutException이 발생할 때 미래의 결과를 채우는 스레드의 현재 스택을 확인하고 싶습니다. TimeoutException에 의해 제공되는 스택 추적의 최상위 항목은 백그라운드 스레드의 상태가 아닌 future.get()이 호출 된 위치를 나타낼뿐입니다. 예를 들어,이 예에서,java - TimeoutException에서 미래의 스택 추적을 얻으려면 어떻게해야합니까?
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(10000);
return "";
}
});
try {
future.get(1, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
나는 최상위 항목이하는 Future.get 것으로 나타났습니다 (1, TimeUnit.MILLISECONDS) 항목이 아닌에 Thread.sleep (10000). Stack.sleep (10000)이 현재 실행되고 있기 때문에 스택 추적에 표시하고 싶습니다. 이 일을하는 우아한 방법이 있습니까?
실제 실행 문제가있는 경우 ExecutionException.printStackTrace()는 백그라운드 스레드에서 문제가 발생한 위치를 나타냅니다.
응답 해 주셔서 감사합니다. 이것은 제가 현재 작성한 것과 매우 흡사합니다. –