Когда следует использовать поток Java вместо Executor?
Executor выглядит как чистая абстракция для управления потоками. В каких ситуациях имеет смысл использовать Thread напрямую, вместо того чтобы полагаться на более надежный Executor?
4 ответ(ов)
Чтобы дать немного истории, Executors были добавлены в стандарт Java только с версии 1.5. Таким образом, Executors можно рассматривать как новое и более качественное абстракция для работы с задачами Runnable.
Немного упрощая... - Executors — это потоки, реализованные правильно, поэтому рекомендуется использовать их в первую очередь.
Не имеет смысла использовать "сырые" потоки. Вы всегда можете передать Executors фабрику потоков, так что даже возможность создания пользовательских потоков обеспечена.
Вы не должны использовать Thread, если вам не нужно поведение, которое не реализовано в самом классе Thread. В таком случае вы можете расширить класс Thread и добавить необходимое вам поведение.
В противном случае просто воспользуйтесь интерфейсом Runnable или классом Executor.
Я подумал, что ThreadPoolExecutor
обеспечивает лучшую производительность, поскольку управляет пулом потоков, минимизируя накладные расходы на создание новых потоков и выделение памяти.
Если вы собираетесь запускать тысячи потоков, он предоставляет функциональность очереди, которую вам пришлось бы реализовывать самостоятельно...
Потоки и исполнительные сервисы — это разные инструменты, используемые в разных сценариях. На мой взгляд, это похоже на вопрос, почему следует использовать ArrayList
, когда можно использовать HashMap
? Они различаются...
Как работают сервлеты? Инстанцирование, сессии, общие переменные и многопоточность
Что значит 'synchronized'?
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Почему методы wait() и notify() объявлены в классе Object в Java?
Поддерживают ли Java сокеты полный дуплекс?