使用ExecutorService运行1个线程

时间:2016-10-23 06:19:58

标签: java multithreading executorservice executor

我正在使用Selenium开发Play商店的评论提取器。我的代码如下:

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();
}

此处,Crawler实施Runnable。使用多个线程,每个人打开一个单独的Firefox实例,Selenium失败,因为网页不可见(它被另一个线程打开的新窗口隐藏)。所以,我试图在一次只有一个线程的情况下执行所有进程。

但是如果我使用ExecutorService以1作为参数实例化newFixedThreadPool,则新线程始终在前一个线程运行时启动。

1 个答案:

答案 0 :(得分:2)

听起来你根本不需要使用线程。只需通过主线程运行爬虫:

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