Я использую ExecutorService и Callable в Java. Класс, реализующий Callable, выполняет некоторые операции ввода-вывода в файловой системе. Как остановить выполнение вызываемого и выйти из него, если возникает исключение?Выход из Java Callable, если произошло исключение
Это пример реализации класса Callable, который имеет два метода, foo1() и foo2()
public class MyCallable<Object> implements Callable<Object> {
public Object call() throws IOException, SQLException {
// method 1 , could throw IOException
foo1();
// method 2 , could throw SQLException
foo2();
return null;
}
}
Это класс примером службы исполнения. Он может иметь дело с исключениями, возникшими во время параллельной обработки через фьючерсный объект.
public class MyExecutorService {
ExecutorService listProcessor;
listProcessor = Executors.newFixedThreadPool(2);
List<Callable<Object>> callableTodo = new ArrayList<Callable<Object>>();
// add the callables to the todo list
callableTodo.add(new MyCallable<Object>());
callableTodo.add(new MyCallable<Object>());
// start the threads
List<Future<Object>> futures = listProcessor.invokeAll(callableTodo);
listProcessor.shutdown();
listProcessor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
// futures now holds possible exceptions
for (Future<Object> future : futures) {
try {
future.get();
} catch (ExecutionException e) {
// process the exception
}
}
}
Но я хотел бы сразу позволить MyCallable остановку, если, например, IOException происходит в Foo1(), и не позволить ей продолжать foo2();
EDIT: Кроме того, если исключено исключение RuntimeException, такое как исключение RuntimeException в foo1(), MyCallable также необходимо остановить.
Это то, что произойдет. Если foo1 генерирует исключение, метод call() немедленно прекратит выполнение. Что заставляет вас думать, что это не остановится? –
Это не очевидно из моего первоначального вопроса, но будут ли исключения Runtime и заставить Callable остановиться? – tkja
Да, конечно. Что еще может произойти? Вы должны действительно изучить основы исключений, прежде чем использовать параллелизм, что очень, очень, очень сложное. –