Назад к вопросам
Middle
98
questionbank

В чем заключается различие между методами submit() и execute() в пуле потоков?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

submit() принимает задачи Runnable или Callable, возвращает Future для получения результата или проверки статуса.

execute() принимает только задачи Runnable, не предусматривает возврата результата.

Ключевые различия:

Метод Тип задачи Возврат значения Обработка исключений
execute() Runnable Нет (void) Перебрасываются обратно в поток-исполнитель
submit() Runnable и Callable Future<?> Инкапсулируются в Future

Пример использования submit() с Callable:

// Пример класса с задачей, возвращающей результат
class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        // Выполняем какую-то работу и возвращаем результат
        return "Задача выполнена";
    }
}

//...
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<String> future = executor.submit(new MyCallable());
try {
    String result = future.get(); // Блокирующее получение результата
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}
executor.shutdown();

Пример использования execute() с Runnable:

// Пример класса с задачей без возврата результата
class MyRunnable implements Runnable {
    @Override
    public void run() {
        // Выполняем какую-то работу
        System.out.println("Задача выполняется");
    }
}

//...
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(new MyRunnable());
executor.shutdown();