Sobes.tech
Junior — Middle

Wat is het verschil tussen de methode submit in Executor en de methode start in Thread bij het uitvoeren van taken in Java?

sobes.tech AI

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