2017-09-26 4 views
-2

私はループを10回実行するforループを使用しています。各イテレーションドライバでは異なるURLに移動し、10回のダウンロードをすべて完了するのに4分かかったファイルを読み込みます。私はforループでマルチスレッドを実装できるかどうか疑問に思っていたので、ダウンロードプロセスを実行するたびに異なるスレッドを開始します。forループの各繰り返しで操作のスレッドを開始する方法は?

for(int i=1;i<=10;i++) { 
     WebDriver driver = new ChromeDriver(setChromePref(URL[i])); 
     obj_SjStrore = new SjStrore(driver); 
     driver.click.findelements(By.xpath("xpath string").click; 
     driver.close(); 
} 
+0

ようこそスタックオーバーフロー。サイトのルールと[HOw to ask](http://stackoverflow.com/help/how-to-ask)もお読みください。ここでの質問に直接答えは出ません。コードを書いてください。もしあなたがそれに悩まされたら、我々はあなたのためにそれを解決するためにここにいます。 – progyammer

+0

はい、できます。それぞれの反復で新しい 'Thread'を作成し、特定のジョブを実行する' Runnable'を提供し、スレッドを開始し、すべてのスレッドオブジェクトをコレクションに格納し、ループの後に、保存されたすべてのスレッドが終了するまで待ちます。 – JimmyB

+0

または、[ExecutorService'](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html)または同様のものを使用してください。 – JimmyB

答えて

0

このようなものは動作するはずです。

import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class ParallelDownload implements Runnable { 

    private String url; 
    private String xpath; 

    public ParallelDownload(String url, String xpath) { 
     super(); 
     this.url = url; 
     this.xpath = xpath; 
    } 

    @Override 
    public void run() { 
     WebDriver driver = new ChromeDriver(); 
     driver.get(url); 
     driver.findElement(By.xpath(xpath)).click(); 
     driver.close(); 
    } 

    public static void main(String[] args) { 

     String url[] = new String[10]; 
     String xpath[] = new String[10]; 

     // create thread executor with pool of 10 threads 
     ExecutorService executor = Executors.newFixedThreadPool(10); 
     for (int i = 0; i < 10; i++) { 
      // Initialize a thread and execute 
      Runnable worker = new ParallelDownload(url[i], xpath[i]); 
      executor.execute(worker); 
     } 

     executor.shutdown(); 
     // wait till all the threads stops executing 
     while (!executor.isTerminated()) { 
     } 

    } 

} 
関連する問題