java for循环上的并发性

java for循环上的并发性,java,concurrency,Java,Concurrency,我有一个使用Selenium运行的方法,可以在网站上快速创建用户帐户。目前它一个接一个地处理,但我想如果我能一次处理10个,那会更好 我目前有一个for循环,用于告诉其中的代码,从2D数组的哪一行读取用户信息。我正在苦苦思索如何让任何流或线程使用正确的值并获取正确的用户信息 目前,我有一些类似于以下的内容: 每次循环时,我都需要加载一个新页面和驱动程序,并需要将数组的值发送到web字段。所以基本上我想让它开始循环,而不是等到第一个循环完成后再开始下一个循环,但可能一次运行的次数限制在10次左右

我有一个使用Selenium运行的方法,可以在网站上快速创建用户帐户。目前它一个接一个地处理,但我想如果我能一次处理10个,那会更好

我目前有一个for循环,用于告诉其中的代码,从2D数组的哪一行读取用户信息。我正在苦苦思索如何让任何流或线程使用正确的值并获取正确的用户信息

目前,我有一些类似于以下的内容:

每次循环时,我都需要加载一个新页面和驱动程序,并需要将数组的值发送到web字段。所以基本上我想让它开始循环,而不是等到第一个循环完成后再开始下一个循环,但可能一次运行的次数限制在10次左右

for(i=0,i<myarray.length, i++) 
{ 
      Webdriver.start();
      WebElement.findby.(By.name("field1").sendkeys(myArray[i][2]);
      Webdriver.end();
} 

for(i=0,i我想你是说,我正在迭代myArray,并对该数组中的每个元素运行一次测试,但不是运行一个测试并等待它完成,然后再运行下一个测试,我希望一次运行一整组测试

使用Java8forkJoinPool可以非常轻松地完成这项工作

ForkJoinTask[] tasks = new ForkJoinTask[myarray.length];
for(i=0,i<myarray.length, i++) 
{ 
    int j = i; // need an effectively final copy of i
    tasks[i] = ForkJoinPool.commonPool().submit(() -> {
        Webdriver.start();
        WebElement.findby.(By.name("field1").sendkeys(myArray[j][2]);
        Webdriver.end();
    });
}
for (i = 0; i < my array.length; i++) {
    tasks[i].join();
}
ForkJoinTask[]tasks=新的ForkJoinTask[myarray.length];
对于(i=0,i{
Webdriver.start();
WebElement.findby.(By.name(“field1”).sendkeys(myArray[j][2]);
Webdriver.end();
});
}
对于(i=0;i

测试将使用“公共”ForkJoinPool中的线程并行运行。如果要调整使用的线程数,请创建自己的ForkJoinPool。(有关更多信息,请参阅。)

我想你是说,我正在迭代myArray,并对该数组中的每个元素运行一次测试,但不是运行一个测试并等待它在运行下一个测试之前完成,而是希望一次运行一整组测试

使用Java8forkJoinPool可以非常轻松地完成这项工作

ForkJoinTask[] tasks = new ForkJoinTask[myarray.length];
for(i=0,i<myarray.length, i++) 
{ 
    int j = i; // need an effectively final copy of i
    tasks[i] = ForkJoinPool.commonPool().submit(() -> {
        Webdriver.start();
        WebElement.findby.(By.name("field1").sendkeys(myArray[j][2]);
        Webdriver.end();
    });
}
for (i = 0; i < my array.length; i++) {
    tasks[i].join();
}
ForkJoinTask[]tasks=新的ForkJoinTask[myarray.length];
对于(i=0,i{
Webdriver.start();
WebElement.findby.(By.name(“field1”).sendkeys(myArray[j][2]);
Webdriver.end();
});
}
对于(i=0;i

测试将使用“公共”ForkJoinPool中的线程并行运行。如果要调整使用的线程数,请创建自己的ForkJoinPool。(有关更多信息,请参阅。)

我会明确地为每个任务启动单独的线程,因为大部分时间很可能会花在等待用户帐户创建上

请参见下面带有粗略示例的代码片段:

public void createAccounts() throws InterruptedException {
    List<Thread> threadList = new ArrayList<>();
    Object[][] myArray = new Object[1][1];
    for(int i=0; i<myArray.length; i++) {
        final int index = i;
        //Add thread for user creation
        threadList.add(new Thread(new Runnable() {
            @Override
            public void run() {
                Webdriver.start();
                WebElement.findby.(By.name("field1").sendkeys(myArray[index][2]);
                Webdriver.end();
            }
        }));
    }
    //Start all threads
    for (Thread thread : threadList) {
        thread.start();
    }
    //Wait until all threads are finished
    for (Thread thread : threadList) {
        thread.join();
    }
}
public void createAccounts()引发InterruptedException{
List threadList=new ArrayList();
对象[][]myArray=新对象[1][1];

对于(inti=0;i我会为每个任务显式地启动单独的线程,因为大部分时间可能会花在等待用户帐户创建上

请参见下面带有粗略示例的代码片段:

public void createAccounts() throws InterruptedException {
    List<Thread> threadList = new ArrayList<>();
    Object[][] myArray = new Object[1][1];
    for(int i=0; i<myArray.length; i++) {
        final int index = i;
        //Add thread for user creation
        threadList.add(new Thread(new Runnable() {
            @Override
            public void run() {
                Webdriver.start();
                WebElement.findby.(By.name("field1").sendkeys(myArray[index][2]);
                Webdriver.end();
            }
        }));
    }
    //Start all threads
    for (Thread thread : threadList) {
        thread.start();
    }
    //Wait until all threads are finished
    for (Thread thread : threadList) {
        thread.join();
    }
}
public void createAccounts()引发InterruptedException{
List threadList=new ArrayList();
对象[][]myArray=新对象[1][1];

对于(int i=0;isorry,可能我不清楚,或者我不清楚,您的回答很好地解决了这一问题。因此,我使用数组就像Excel中的表格一样,因此用户数据跨数组中的一行或多列。我需要为每个测试启动一个新的web驱动程序,并且有一个测试数组针对每行运行不同的列。如果我将此设置为列表,那么我可能很难确定列表中的哪个字符串是针对该特定用户的?好吧,忘记列表。我将更新答案。抱歉,可能我不清楚,或者可能我不清楚,并且您的答案很好地解决了这一问题。因此,我像Excel中的表一样使用数组,因此用户数据在多个列中跨数组的一行。我不需要o为每个测试启动一个新的web驱动程序,并且每行都有一组测试运行在不同的列上。如果我将此列作为一个列表,那么我可能很难确定列表中的哪个字符串是针对该特定用户的?好的,忘记该列表。我将更新答案。