我正在尝试使用MultiThreaded运行一个Selenium测试(参考是-> https://www.programcreek.com/java-api-examples/?api=io.github.bonigarcia.wdm.WebDriverManager )
@Test
public void test() throws InterruptedException {
private int NUM_DATA =2;
private int NUM_LATCH=2;
private int POOL_SIZE=2;
CountDownLatch latch = new CountDownLatch(NUM_LATCH);
ExecutorService executorService = newFixedThreadPool(POOL_SIZE);
for (int i = 0; i < NUM_DATA; i++) {
executorService.submit(() -> {
try {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
WebDriver driver = new ChromeDriver(options);
driver.get(
"https://bonigarcia.github.io/selenium-jupiter/");
String title = driver.getTitle();
System.out.println(title);
driver.quit();
} finally {
latch.countDown();
}
});
}
latch.await();
executorService.shutdown(); }在我的情况下
TRHEAD
,
通过工作良好的方式,这里意味着打开所有浏览器实例并执行,然后关闭所有浏览器。
我的问题是,如果我有1000套NUM_DATA,而POOL_SIZE一次是10。是否必须将NUM_LATCH始终设置为NUM_DATA?
根据"https://www.baeldung.com/java-countdown-latch“中的文章
“如果我们正在进行一些并行处理,我们可以为计数器实例化CountDownLatch,其值与我们想要跨越的多个线程相同”
但在这里,我们设置的不是num_Latch= POOL_SIZE,而是num_Latch= Num_Data_Set的数量。这是使用CountDownLatch的正确方式吗?
发布于 2022-11-20 16:41:46
,我必须设置NUM_LATCH总是等于NUM_DATA吗?
否则又有什么意义呢?门闩的用途是什么?NUM_DATA是提交给执行器的任务数。我假设您希望主线程中的latch.await()调用在所有这些任务完成后返回。是那么回事吗?如果这是您想要的,那么锁锁的初始值最好等于NUM_DATA。
我认为您根本不应该声明NUM_LATCH,只需编写new CountDownLatch(NUM_DATA)。这向正在阅读您的代码的其他任何人表明,您需要锁锁的初始值等于任务的数量。
https://stackoverflow.com/questions/74508842
复制相似问题