Je suis en train de développer un extracteur de révision pour le Play Store, en utilisant Selenium. Mon morceau de code est le suivant:Exécuter 1 thread à la fois avec ExecutorService
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();
}
Ici, Crawler
implémente Runnable
. En utilisant plus que sur un thread, où chacun ouvre une instance séparée de Firefox, Selenium échoue car la page web n'est pas visible (elle est cachée par une nouvelle fenêtre ouverte par un autre thread). Donc, j'essaye d'exécuter tout le processus avec seulement 1 fil à la fois.
Mais aussi si j'instancie un ExecutorService
en utilisant newFixedThreadPool
avec 1 comme paramètre, un nouveau thread démarre toujours lorsque le précédent est en cours d'exécution.
Votre application se termine-t-elle après un et un seul appel à cette méthode 'extract'? Y at-il d'autres travaux dans l'application ou est-ce que cette méthode est son seul travail? –
'Executors.newFixedThreadPool (1);' retournera un pool de threads avec seulement 1 thread, de sorte que toutes les tâches soumises à ce pool s'exécuteront séquentiellement. Si ce n'est pas le cas pour vous, il y a une erreur ailleurs. – Nikem