Mettre en place un pool de threads pour le traitement par lots
Imaginez que vous développez un système de traitement de documents qui doit gérer plusieurs documents simultanément. Chaque document nécessite un traitement intensif qui doit être effectué en parallèle, mais vous souhaitez limiter le nombre d’opérations concurrentes pour éviter une surcharge du système. Vous allez mettre en œuvre une solution avec ExecutorService pour gérer efficacement la charge de traitement.
Cet exercice fait partie du cours
Optimiser son code en Java
Instructions
- Créez un pool de threads fixe contenant 3 threads.
- Soumettez la méthode
processDocument(doc)en tant que tâche à l’exécuteur. - Arrêtez l’exécuteur sans forcer l’arrêt immédiat.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
public class DocumentProcessor {
public static void main(String[] args) throws InterruptedException {
List documents = List.of("Doc1", "Doc2", "Doc3", "Doc4", "Doc5");
List> futures = new ArrayList<>();
// Create a fixed thread pool with 3 threads
ExecutorService executor = Executors.____(____);
for (String doc : documents) {
// Submit the processDocument() method to the executor
futures.add(executor.submit(() -> ____(____)));
}
// Shutdown the executor and wait for termination
executor.____();
executor.awaitTermination(10, TimeUnit.SECONDS);
try {
for (Future future : futures) {
System.out.println(future.get());
}
} catch (ExecutionException e) {
System.out.println("Error processing documents: " + e.getMessage());
}
}
private static String processDocument(String docId) throws InterruptedException {
System.out.println("Processing " + docId + " on thread " + Thread.currentThread().getName());
Thread.sleep((long) (Math.random() * 1000));
return docId + " Processed";
}
}