Executor
또는을 사용하여 작업을 실행해야합니다 ExecutorService
. 작업 ( Callable
또는 Runnable
)은 무한히 실행되어야하지만 예외가 발생하는 경우 작업을 제출 한 스레드로 다시 던져 져야합니다.
나는 그것이 나를 위해 future.get()
던질 것이라는 것을 안다 ExecutionException
.
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(new Task());
future.get();
그러나 화창한 날 시나리오에서는 future.get()
무기한 차단 하므로 사용할 수 없습니다.
Executor
기본 작업이 실패 할 때 단순히 예외를 throw하는 것이 가능 합니까?
단순히 Executors를 사용하여 이것을 할 수 있다고 생각하지 않습니다.
Task에서 try-catch 블록 사용을 고려하고 catch 블록의 대기열에 예외를 추가 할 수 있습니다.
try{
//perform task
}catch(Exception e){
queue.offer(e)
}
대기열에서 예외를 읽는 스레드를 만듭니다.
public void run() {
Exception e;
try {
e = q.take();
e.printStackTrace();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다