Пара вопросов, касающихся Java ExecutorService newFixedThreadPool - PullRequest
0 голосов
/ 26 августа 2018

Обратите внимание, что я обычно задаю вопрос после поиска в Google более 20 раз об этой проблеме.Но я до сих пор не могу этого понять.Поэтому мне нужна ваша помощь.

В принципе, я не понимаю точного использования newFixedThreadPool

  1. Означает ли newFixedThreadPool(10) наличие десяти различных потоков?Или это означает, что он может иметь 10 одинаковых потоков?или оба?Я выполнил submit() методами более 20 раз, и он работает.

  2. Печатает ли submit() значение?Или вы ставите темы в ExecutorService?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Просто обратитесь к документации Java или описанию API JAVA, а не гугляте его.Для ваших вопросов у меня есть комментарии ниже.

Вопрос 1 ->

ExecutorService executorService = Executors.newFixedThreadPool (10);

Сначала создается ExecutorService с использованием newFixedThreadPool Executors) заводской метод.Это создает пул потоков с 10 потоками, выполняющими задачи.

Executors.newFixedThreadPool API создает пул потоков, который повторно использует фиксированное число потоков, и эти потоки работают напоскольку *** имела неограниченную очередь ***.В любой момент не более nThreads потоков будут активными задачами обработки.Если дополнительные задачи отправляются, когда все потоки активны, они будут ждать в очереди, пока поток не станет доступным.Если какой-либо поток завершается из-за сбоя во время выполнения до завершения работы, новый будет занимать его место, если это необходимо для выполнения последующих задач.Потоки в пуле будут существовать до тех пор, пока он не будет явно ОТКЛЮЧЕН.После отправки даже 20 задач он работал с этим пулом потоков.

Внутренне он вызывает нижнюю строку кодов. public static ExecutorService newFixedThreadPool (int nThreads) {вернуть новый ThreadPoolExecutor (nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue ());}

Вопрос 2-> Отправляет задачу Runnable для выполнения в очереди, а также может возвращать объект типа Future Object, представляющий задачу.мы можем использовать метод get из Future, чтобы проверить, успешно ли выполнено заданное задание или нет, потому что оно вернет ноль при успешном завершении.

0 голосов
/ 26 августа 2018

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

Итак, чтобы ответить на ваши вопросы:

  1. newFixedThreadPool(int nThreads) создает пул потоков nThread, которые работают в одной и той же очереди ввода.nThreads - это максимальное количество потоков, которые могут быть запущены в любой момент времени.Каждый поток может запускать разные задачи.На вашем примере вы можете запускать до 10 задач одновременно.(Документация может быть найдена здесь с указанием @ hovercraft-full-of-eels)
  2. submit() помещает заданную задачу в очередь событий, которая используется потоками впул потоков.Как только поток станет доступным, он возьмет задачу с начала очереди и выполнит ее.Он не должен ничего печатать, если только Runnable, который вы передаете, не содержит оператора печати.Тем не менее, заявление на печать может быть напечатано неправильно, когда вы отправляете задание!Он напечатает, как только поток выполнит эту конкретную задачу.(Документацию можно найти здесь )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...