Sobes.tech
Middle
140
questionbank

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

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

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();