2016-08-21 15 views
0

ExecutorまたはExecutorServiceを使用してタスクを実行する必要があります。タスク(CallableまたはRunnable)は無限に実行されるはずですが、例外が発生した場合は、タスクを送信したスレッドに再投入する必要があります。例外を再発行するExecutorService

私はfuture.get()が私のためにExecutionExceptionを投げるだろうことを知っている:

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

しかし、晴れた日のシナリオでは、私は無期限future.get()をブロックするので、私はそれを使用することはできません。

Executorは、基本となるタスクが失敗したときに例外をスローすることはできますか?

答えて

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 
      } 
    } 
関連する問題