Junior — Middle
Quelle est la différence entre la méthode submit dans Executor et la méthode start dans Thread lors de l'exécution de tâches en Java?
sobes.tech IA
Réponse de l'IA
Метод 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();