2016-08-21 6 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

Я не думаю, что это можно сделать просто с помощью исполнителей.
Вы можете рассмотреть возможность использования блока 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 
      } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^