繁体   English   中英

如何并行运行Java for循环?

[英]How to run java for loop in parallel?

我是新手学习Selenium,并在Java代码下面编写。 我正在尝试运行一个应该将站点加载20次的for循环。 现在它确实按顺序循环,我希望可以并行运行。 你能帮忙吗?

public class lenders {

   //ExtentReports logger = ExtentReports.get(lenders.class);
   public static void main(String[] args) throws InterruptedException  {

   for (int i=0; i<20; i++) {
      FirefoxDriver driver= new FirefoxDriver();
      driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.SECONDS);

      try {
         driver.get("https://www.google.com");
      } catch (TimeoutException e) {
           driver.quit();
      }
}

最后,我希望打开20个浏览器并加载该网站,然后将所有浏览器都杀死。

如果您使用的是Java-8,则可以使用parallelStream运行parallel for循环

 IntStream.range(0,20).parallel().forEach(i->{
         ... do something here
 });

一般来说,在较高级别上,尝试在Java中并行运行代码意味着您正在尝试运行多线程代码(一次执行多个线程)。

正如个人在评论中所说的那样,因此必须在我的回答中给出警告。 多线程本身是一个复杂的主题,并且必须谨慎进入该领域,因为可能存在许多与“线程安全”有关的问题/主题,即使这是您“应该”处理“业务请求”的方式。

无论如何,如果您真的想创建多线程的东西,那么我将指导您一些技术性知识,以使您开始进行主题培训(以及您自己的进一步研究):您可以创建另一个实现Callable接口的类。 然后,根据实现该接口的性质,它将必须具有“调用”方法。 在此类和“调用”方法中,您将并行放置想要的实际逻辑。 在您的情况下,所有驱动程序等

然后,在您的父类(从上面放置代码的类)中,可以使用FixedThreadPool和关联的ExecutorService来接受此可调用类。 它实际上将在单独的线程中运行“调用”方法,以便您的for循环可以在执行“调用”方法中的逻辑的同时继续进行。 它将第二次运行并创建另一个线程,等等。您可以管理使用线程池创建的线程数。 您可以使用其他类型的线程池和服务等。同样,这是一个非常大的主题和领域。 我只是想让您朝着正确的方向发展。

人们可能不喜欢我的答案,因为他们认为您应该以不同于这种方式使用Selenium的方式使用完全不同的技术,等等。我完全理解这种观点,并且不同意这些替代答案。 但是,您的问题是“如何同时运行此程序”,我已尝试为您提供构建基块的答案。 希望对您有所帮助! 让我知道您是否需要一些指向教程或其他内容的链接,但是带有单词java和tutorial的google“ ExecutorService”,“线程池”和“ Callable”(或它们的组合)应该为您提供有关该主题的各种答案。

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM