Bonjour,
J'ai suivi un tuto sur le framwork Executor, mais il reste un petit point d'ombre sur le CompletionService.
Je souhaiterai lancer de nouveaux thread des qu'un future est disponible vie le take() du CompletionService.
Je ne vois pas du tout comment effectuer cela.
voila ce que je souhaiterai faire des qu'un objet future est disponible, mais comment?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 //... private List<Future<Administre>> futuresAdm = null; private List<Callable<Administre>> taskAdm = null; private List<Future<Administre>> futuresData = null; private List<Callable<Administre>> taskAdmData = null; //... public void start(){ // lancement du pool de recuperation des administres try { // on recupere une liste de nni a traiter pour les ajouter a la liste des taches (thread producteur) // daoInfx = new DaoAdministreGds(); daoInfx = new DaoBouchAdministreGds(); for (Administre adm : daoInfx.findAll(false)){ taskAdm.add(new ImportAdministreCallable(adm)); } // declaration de l'executor en pool de thread limité au nombre de cpu disponible sur la machine ExecutorService executorAdm = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); ExecutorService executorData = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); // declaration du Completion service pour traitement des resultats des que disponibles CompletionService<Administre> completionServiceAdm = new ExecutorCompletionService<>(executorAdm); CompletionService<Administre> completionServiceData = new ExecutorCompletionService<>(executorData); // ajout des taches a traiter a la liste de Futurs<T> for (Callable<Administre> c : taskAdm){ futuresAdm.add(completionServiceAdm.submit(c)); } //...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 task = new ImportDataFromAdmCallable(completionServiceAdm.take().get()); taskAdmData.add(task); futuresData.add(completionServiceData.submit(task));
Partager