Я пытаюсь запустить 5 потоков веб-драйвера selenium в указанное время, дождаться окончания этих потоков, затем открыть еще 5, повторяя, пока не будет запущено ~ 200 потоков. Мой код может открыть 5 потоков и ждать, пока они не закончатся, прежде чем двигаться дальше, но когда я пытаюсь поместить это в цикл и установить цель на 10 потоков (должно быть 5 потоков, которые работают и заканчивают, затем 5 потоков, которые работают и заканчивают впоследствии), он открывает все 10 потоков одновременно. Я обеспокоен тем, что если я увеличу цель до 200 потоков, это приведет к перегрузке компьютера.
Основываясь на ответе на другой вопрос, заданный здесь (не могу найти его на всю жизнь), я переключился с использования Thread на ExecutorService, который работал, чтобы знать, когда 5 потоков завершены. Я не очень опытный, поэтому, за исключением циклов / do-while / while (которые я все пробовал), я не знаю, какие еще циклы я мог бы попробовать.
LISTSPERSESSION = 10;
ExecutorService es = Executors.newCachedThreadPool();
int listIndex = 0;
do {
boolean finished = false;
//Goes until 5 lists are searched OR the number of lists per session is hit
for(int i=0; i < 5 || listIndex < LISTSPERSESSION; i++) {
listIndex++;
int index = i;
es.execute(() -> v.searchDatabase(index));
}
es.shutdown();
try {
finished = es.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(finished == true) {
if(listIndex == LISTSPERSESSION) {
break;
} else {
continue;
}
}
} while(false);
Открывает все 10 потоков одновременно, а не 5 одновременно.