gpt4 book ai didi

java - 通过创建线程池在运行 JUnit 测试脚本时在线程之间添加延迟

转载 作者:行者123 更新时间:2023-12-01 04:19:44 25 4
gpt4 key购买 nike

我正在尝试使用线程并行运行 JUnit 测试脚本(基本上所有测试脚本都与 Selenium WebDriver 相关),为此我使用 ExecutorService 创建了一个大小的线程池,下面是我的代码线程池创建

ExecutorService executor = Executors.newFixedThreadPool(4);
for (int threadpoolCount = 0; threadpoolCount < classNames.size(); threadpoolCount++) {
Runnable worker = new ProcessRunnable(classNames.get(threadpoolCount));
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}

这是我的线程实现,它触发 Junit 类

public class ProcessRunnable implements Runnable{
private String classNames;
public ProcessRunnable(String className) {
this.classNames = className;
}

public void run() {
try {
Class testcase = Class.forName(classNames);
JUnitCore.runClasses(testcase);

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

我面临的问题是,尽管线程池在初始化时维持了 4 个线程的大小,它同时执行所有线程,这在浏览器启动时会产生一些同步问题。所以我的想法是在线程执行之间添加一些延迟。

由于我在线程池内创建一个新的可运行线程,因此我不确定如何在线程之间添加等待或延迟,因此我无法解决这个问题。请帮助我解决这个问题,非常感谢您的帮助。

最佳答案

如果您想要串行解决方案(如果您需要延迟,则可能需要),请使用Executors.newSingleThreadExecutor()。否则你可以像这样 sleep 线程:

Thread.sleep(1000L); //1 second (takes long, not int)

或者使用根据线程数递增的值。

更好的解决方案是使用 ScheduledThreadPoolExecutor.schedule(Runnable) 。您以自定义(静态或增加)延迟提交它们。将核心大小设置为4,它将表现得像一个固定的线程池;来自文档:

While this class inherits from ThreadPoolExecutor, a few of the inherited tuning methods are not useful for it. In particular, because it acts as a fixed-sized pool using corePoolSize threads and an unbounded queue, adjustments to maximumPoolSize have no useful effect. Additionally, it is almost never a good idea to set corePoolSize to zero or use allowCoreThreadTimeOut because this may leave the pool without threads to handle tasks once they become eligible to run.

关于java - 通过创建线程池在运行 JUnit 测试脚本时在线程之间添加延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com