Доброе утро в моем часовом поясе.
Я использую пул потоков для разработки маленького робота Http, который перемещается от ссылки к ссылке на каждой странице. Когда я нашел новую ссылку, я создаю новую тему, которая будет исследовать эту новую страницу.
Псевдокод.
pool = Executors.newFixedThreadPool(40);
pool.execute(new Exploit(tree.getRoot()));
В этом случае Exploit является внутренним классом, который реализует интерфейс Runnable и имеет доступ к пулу, поэтому каждый раз, когда один поток находит ссылку, будет использовать пул для добавления нового «потока» следующим образом:
for(Link n : links){
pool.execute(new Exploit(n));
}
Я видел много примеров использования класса ExecutorService, но все они используют один и тот же код, подобный следующему:
ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);
for (int i = 0; i < 500; i++) {
Runnable worker = new MyRunnable(10000000L + i);
executor.execute(worker);
}
// This will make the executor accept no new threads
// and finish all existing threads in the queue
executor.shutdown();
В приведенном выше коде число потоков является статическим, поэтому, когда код вызывает завершение работы, все потоки уже были добавлены в пул. Я не могу следовать этому коду, потому что в моем случае у меня нет статического числа потоков добавить. Мое условие остановки для добавления большего количества потоков в пул - когда я достиг глубокого уровня поиска. Итак, мой вопрос, как мне вызвать executor.shutdown в основном потоке? Есть ли какое-либо соединение, которое я могу использовать в главном потоке?
Спасибо заранее.
С наилучшими пожеланиями