Sobes.tech
Назад к вопросам
Junior — Middle
74

Какое отличие между методом submit у Executor и методом start у Thread при запуске задач в Java?

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

sobes.tech AI

Метод start() у класса Thread непосредственно запускает новый поток и вызывает метод run() в этом потоке. Это низкоуровневый способ создания и запуска потока.

Метод submit() у Executor (например, у ThreadPoolExecutor) отправляет задачу (Runnable или Callable) в пул потоков для асинхронного выполнения. В отличие от start(), submit() не создает новый поток напрямую, а использует существующие потоки из пула, что эффективнее с точки зрения ресурсов.

Основные отличия:

  • start() запускает новый поток каждый раз, что может быть дорого по ресурсам.
  • submit() использует пул потоков, переиспользуя потоки и управляя их количеством.
  • submit() возвращает Future, позволяющий получить результат или проверить статус задачи.

Пример:

ExecutorService executor = Executors.newFixedThreadPool(2);
Future<?> future = executor.submit(() -> {
    System.out.println("Задача выполняется");
});

Thread thread = new Thread(() -> {
    System.out.println("Поток запущен");
});
thread.start();