Почему один Runnable может работать в качестве нескольких потоков?
Подскажите, почему успешно работает вариант, когда в пул передается один и тот же объект в качестве разных потоков? В примере это producer. Я проверял замеры времени, и факт того, что в обрабатываемую очередь эти потоки помещают разные объекты. Там все корректно. Как это работает? Вопрос еще возник потому что все примеры которые приходилось видеть раньше, предполагали создание новых потоков при помещении в пул.
И еще вопрос: есть ли необходимость создавать два пула как здесь? Моя проверка показывает, что все также работает если поместить все потоки в один пул.
producerService = Executors.newFixedThreadPool(PRODUCERS);
for (int i = 0; i < PRODUCERS; i++) {
producerService.execute(producer);
}
consumerService = Executors.newFixedThreadPool(CONSUMERS);
for (int i = 0; i < CONSUMERS; i++) {
consumerService.execute(consumer);
}
по ссылке привожу полный пример из книги "Леонард А. Java. Решение практических задач" https://github.com/PacktPublishing/Java-Coding-Problems/blob/master/Chapter10/P203_ThreadPoolFixed_ConcurrentLinkedQueue/src/modern/challenge/AssemblyLine.java