Mediumexecutor-service
Чем submit отличается от execute в ExecutorService?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
execute(Runnable) — из Executor, не возвращает результат, исключения внутри обрабатываются UncaughtExceptionHandler (по умолчанию stderr и поток умирает). submit(Runnable/Callable) — из ExecutorService, возвращает Future, исключения сохраняются внутри и выбрасываются при future.get().
executor.execute(() -> doWork()); // без результата
Future<Integer> f = executor.submit(() -> 42); // с результатом
try {
Integer r = f.get(1, TimeUnit.SECONDS); // блокирует с timeout
} catch (ExecutionException e) { // оборачивает исключение задачи
log.error(e.getCause());
}
f.cancel(true); // отменить, может прерватьsubmitпредпочтительнее: результат, обработка исключений в caller, возможностьcancel;invokeAll(coll)— список Future, ждёт все;invokeAny(coll)— первый успешный;- Не забывать
shutdown()— иначе JVM не завершится (non-daemon потоки пула живы).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.