Как работает java.util.concurrent.Executor? - PullRequest
4 голосов
/ 23 апреля 2011

Как java.util.concurrent.Executor создает "настоящий" поток?Предположим, я реализую Executor или использую любую службу executor (например, ThreadPoolExecutor).Как внутренне работает JVM?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

Звонит ThreadFactory. Посмотрите на класс Executors. Обратите внимание, что все они имеют перегруженный аргумент, в котором вы можете указать реализацию ThreadFactory. Интерфейс ThreadFactory в основном

public Thread newThread(Runnable runnable);

и реализация по умолчанию, если она не указана, просто равна return new Thread(runnable);

Зачем переопределять это - ну, это очень полезно для установки имени потока и статуса демона среди прочего.

0 голосов
/ 23 апреля 2011

Исполнитель - готовый интерфейс управления потоками.

В зависимости от типа исполнителя создается один или несколько потоков.После того, как поток завершает свою задачу, исполнитель останавливает их или оставляет работать.Вы также можете иметь исполнителя, который запускает запланированные задачи (например, каждую минуту).Это хорошая альтернатива для создания множества (часто тысяч потоков), которые требуются всего за пять секунд, или множества потоков, используемых со временем.

Если указать число потоков для создания и отправки большего количества задач,количество нитей - все остальные объекты Runnable будут стоять в очереди, пока не наступит их очередь.Никакой магии JVM здесь просто Java-код.

...