Sobes.tech
Middle
166
questionbank

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

AI答案

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