2016-10-23 14 views
1

Seleniumを使用してPlayストアのレビュー抽出を開発しています。ここでExecutorServiceを使用してスレッドを1回実行する

public void extract() { 

    ExecutorService executor = Executors.newFixedThreadPool(this.configurationManager.getNumberOfThreadToUse()); 

    for (String currentApp : appsToMine) { 
     ArrayList<String> aux = new ArrayList<>(); 
     aux.add(currentApp); 
     Crawler googlePlayStoreCrawler = CrawlerFactory.getCrawler(this.configurationManager, aux, "google"); 
     executor.execute(googlePlayStoreCrawler); 
    } 
    executor.shutdown(); 
} 

は、CrawlerRunnableを実装します。コードの私の作品は、次のようです。 Firefoxの別のインスタンスを開くスレッド上でmoreを使用すると、Webページが表示されないため(別のスレッドによって開かれた新しいウィンドウによって隠されているため)、Seleniumは失敗します。だから、私はすべてのプロセスを1スレッドで実行しようとしています。

しかし、ExecutorServiceをインスタンス化する場合、パラメータとして1を使用してnewFixedThreadPoolを1に設定すると、新しいスレッドは、前回の実行時に常に開始されます。

+0

この「抽出」メソッドを1回だけ呼び出すと、アプリケーションは終了しますか?アプリケーションにこれ以上の作業があるのですか、またはこのメソッドがその唯一の仕事ですか? –

+0

'Executors.newFixedThreadPool(1);'はスレッドが1つしかないスレッドプールを返します。したがって、このプールに送信されたタスクはすべて順番に実行されます。これはあなたのためのケースではない場合は、他のどこかでミスがあります。 – Nikem

答えて

2

スレッドをまったく使用する必要はありません。

for (String currentApp : appsToMine) { 
    ArrayList<String> aux = new ArrayList<>(); 
    aux.add(currentApp); 
    Crawler googlePlayStoreCrawler = CrawlerFactory.getCrawler(this.configurationManager, aux, "google"); 
    googlePlayStoreCrawler.run(); 
} 
関連する問題