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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
public class TestTest
{
public static void main(String[] args) throws InterruptedException, ExecutionException
{
// déclare un pool de deux thread
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
// la classe qui effectue le traitement métier, ici juste un system.out.println
MontraitementMetier traitement = new MontraitementMetier();
// prépare les taches à exécuter en parallèle
Collection<Callable<String>> tasks = new ArrayList<Callable<String>>();
tasks.add(new MontraitementMetierParallelisable(traitement, "1"));
tasks.add(new MontraitementMetierParallelisable(traitement, "2"));
tasks.add(new MontraitementMetierParallelisable(traitement, "3"));
tasks.add(new MontraitementMetierParallelisable(traitement, "4"));
tasks.add(new MontraitementMetierParallelisable(traitement, "5"));
// exécution en parallèle du traitement. Appel MontraitementMetierParallelisable.call
List<Future<String>> resultats = newFixedThreadPool.invokeAll(tasks);
// fermeture du pool
newFixedThreadPool.shutdown();
// travail sur les resultat si necessaire
for (Future<String> resultat : resultats)
{
System.out.println(resultat.get());
}
}
public static class MontraitementMetier
{
public void printString(String string)
{
System.out.println(string);
}
}
public static class MontraitementMetierParallelisable implements Callable<String>
{
private MontraitementMetier traitement;
private String valeurAtraiter;
public MontraitementMetierParallelisable(MontraitementMetier traitement, String valeurAtraiter)
{
this.traitement = traitement;
this.valeurAtraiter = valeurAtraiter;
}
/**
* (methode de remplacement) {@inheritDoc}
*
* @see java.util.concurrent.Callable#call()
*/
public String call() throws Exception
{
traitement.printString(valeurAtraiter);
// ce qui est renvoyé dans cette fonction est ajouté dans List<Future<String>> resultats
return valeurAtraiter + "traite";
}
}
} |