尝试一次 运行 只有 5 个 selenium webdriver 线程,重复直到 200 个线程 运行

Trying to run only 5 threads of selenium webdriver at once, repeating until 200 threads have been run

我试图在给定时间让 5 个线程的 selenium webdriver 达到 运行,等待这些线程完成,然后再打开 5 个,重复直到 ~200 个线程 运行 .我的代码可以打开 5 个线程并等待它们完成后再继续,但是当我尝试将其放入循环并将目标设置为 10 个线程时(应该是 运行 并完成的 5 个线程,然后是 5 个线程运行 然后完成),它同时打开所有 10 个线程。我担心如果我将目标提高到 200 个线程,它会使计算机超载。

根据对此处提出的另一个问题的回答(我一辈子都找不到),我从使用 Thread 切换到 ExecutorService,它可以知道 5 个线程何时完成。我不是很有经验,所以除了 for/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 个。

只要 listIndex < 10,此规则 i < 5 || listIndex < LISTSPERSESSION 将评估为 true

将 OR 切换为 AND:i < 5 && listIndex < LISTSPERSESSION

For 循环条件应该在大括号中并且添加 && 而不是 ||运算符

(i < 5 && listIndex < LISTSPERSESSION)