2016-08-21 5 views
0

Executor 또는 ExecutorService을 사용하여 작업을 실행해야합니다. 작업 (Callable 또는 Runnable)은 무한대로 실행되어야하지만 예외가 발생한 경우 작업을 제출 한 스레드로 다시 전달해야합니다.예외를 다시 발생시키는 ExecutorService

ExecutorService executor = Executors.newSingleThreadExecutor(); 
    Future<?> future = executor.submit(new Task()); 
    future.get(); 

그러나, 화창한 날 시나리오에 내가 무기한 future.get()에 차단, 그래서 그것을 사용할 수 없습니다

나는 future.get() 나를 위해 ExecutionException를 던질 것이라는 점을 알고있다.

Executor은 기본 작업이 실패 할 때 단순히 예외를 throw 할 수 있습니까?

답변

1

단순히 Executors를 사용하여이 작업을 수행 할 수 있다고 생각하지 않습니다.
작업에서 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 
      } 
    } 
관련 문제