3

Ich versuche, eine Reihe von Links in verschiedenen WebChrome-Treibern (atcThread[]) so schnell wie möglich zu öffnen. Ich habe versucht, ExecutorService zu implementieren, erkannte aber, dass die anfängliche Ausführung der Threads sequenziell sind. Gibt es eine Möglichkeit, die Links parallel zu öffnen, um schneller zu sein? Vielen Dank!Multithreading und Selenium

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

public class ATC { 
    private ExecutorService executor = Executors.newFixedThreadPool(15); 

    public void startThreads() { 
     for (int i = 0; i < Captcha.x; i++) { 
      executor.execute(new ATCpool(i, Generator.links[i])); 
     } 
    } 

    private final class ATCpool implements Runnable{ 

     public ATCpool(int x, String link){ 
      Generator.atcThread[x].get(link); 
     } 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
     } 
    } 
} 

Antwort

1

Für mich dieses Verhalten, weil Sie die Methode get(String url) im Konstruktor Ihrer Klasse nennen ATCpool statt es in die run Methode aufrufen seine Forderung an den Threadpool zu verteilen, wie Sie es erwarten.

einfach Ihre Klasse ATCpool für so etwas ändern:

private final class ATCpool implements Runnable { 

    private final int x; 
    private final String link; 

    ATCpool(int x, String link){ 
     this.x = x; 
     this.link = link; 
    } 

    @Override 
    public void run() { 
     // Will be called asynchronously by a thread of the thread pool 
     Generator.atcThread[x].get(link); 
    } 
}