java ThreadPoolExecutor default
Я читал документацию по Oracle для ThreadPoolExecutor и, в частности, об организации очередей на случай, если доступно больше запросов, чем Threads. Однако я не выяснил, какие настройки по умолчанию.
Единственное, что я делаю, чтобы создать экземпляр Исполнителя:
executor = Executors.newFixedThreadPool(numberOfThreads);
где executor - из java.util.concurrent.ExecutorService, а Executor - из java.util.concurrent.Executors.
Оттуда в единственной строке, где снова появляется исполнитель, находится:
executor.execute(worker);
Итак, как вы видите, я никогда не задавал никаких свойств типа и размера очереди, которые использует исполнитель.
Я хочу знать, какая из стратегий, описанных в документации, которую я связал, используется.
С реализацией, как я показал: я использую неограниченную очередь? Это ограничено? Если так, какой размер по умолчанию?
2 ответа
Вам просто нужно прочитать Javadoc:
public static ExecutorService newFixedThreadPool (int nThreads)
Создает пул потоков, который повторно использует фиксированное число потоков, работающих в общей неограниченной очереди. В любой момент не более nThreads потоков будут активными задачами обработки. Если дополнительные задачи отправляются, когда все потоки активны, они будут ждать в очереди, пока поток не станет доступным.
(акцент мой)
Если вы хотите максимальной гибкости, вы можете использовать конструктор ThreadPoolExecutor, который позволит вам выбрать любую деталь, которую вы хотите.
Смотреть исполнителей SRC
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor (nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue <Runnable >());
}
как мы видим, он неограничен. LinkedBlockingQueue