Un simple "Hello World" personnalisé implémenté avec une complexité totalement disproportionnée utilisant ExecutorService, Callable, Future et la programmation asynchrone... pour une tâche qui pourrait tenir en une ligne ! 😄
- ExecutorService : Un pool de threads... d'UN SEUL thread pour dire "Hello"
- Callable : Une tâche asynchrone pour concaténer deux chaînes de caractères
- Future : Un résultat asynchrone pour récupérer... une concaténation
- Thread pool management : Création et fermeture propre d'un thread pool pour UNE opération
- Complexité artificielle : Utiliser des concepts avancés là où
System.out.println("Hello " + name)suffirait - Architecture distribuée : Pour une opération locale instantanée
- Gestion des exceptions :
ExecutionExceptionetInterruptedExceptionpour une simple concaténation
- Démonstration par l'absurde : Montrer ce qu'il NE faut PAS faire
- Satire technologique : Parodier les architectures sur-complexes
- Humour de développeur : Le plaisir de coder quelque chose de ridicule mais techniquement correct
HelloFromJava
├── Demande le nom à l'utilisateur (synchrone)
├── Crée un ExecutorService à un thread
├── Soumet une tâche Callable pour... concaténer
├── Attend le résultat avec Future.get()
├── Affiche le résultat
└── Ferme proprement l'ExecutorService
Ce que ça fait réellement : "Hello " + nom
Complexité ajoutée : 300% de code en plus, gestion de threads, exceptions asynchrones
- Java JDK 8 ou supérieur
- Un sens de l'humour développeur
- La capacité à apprécier l'ironie
javac HelloFromJava.javajava HelloFromJavaEnter your name: Alice
Hello Alice
Temps d'exécution : ~5ms (création thread pool + exécution + fermeture)
Version simple équivalente :
System.out.println("Hello " + scanner.nextLine());Temps d'exécution : ~1ms
- Overhead démesuré : On crée un thread pool pour une opération instantanée
- Asynchrone inutile : Aucune opération longue ou bloquante à gérer
- Complexité cognitive : 10 concepts avancés pour faire "Hello World"
- Gestion d'erreurs overkill : Try-catch pour une concaténation de chaînes
- Pédagogie par l'absurde : Montre tous les concepts d'un coup
- Humour de développeur : On comprend immédiatement la blague
- Code techniquement correct : Tout fonctionne parfaitement
- Démonstration maîtrisée : Prouve qu'on connaît les outils (même mal utilisés)
Ce projet enseigne :
- L'utilisation d'ExecutorService et sa fermeture propre
- La différence Runnable vs Callable (avec retour de valeur)
- La gestion des Future pour récupérer des résultats asynchrones
- Les exceptions de concurrence (
ExecutionException,InterruptedException) - Quand NE PAS utiliser ces outils (le plus important !)
CompletableFuture.supplyAsync(() -> "Hello " + name)
.thenApply(String::toUpperCase)
.thenCompose(s -> CompletableFuture.completedFuture(s.toLowerCase()))
.join();// TODO: Déployer "Hello" sur un conteneur Docker
// TODO: "nom" dans une base de données Redis
// TODO: Concaténation via une API RESTCe projet est la preuve parfaite qu'on peut techniquement tout faire avec Java... même les choses les plus inutiles !
Morale : Maîtriser les outils, c'est aussi savoir quand ne PAS les utiliser.
Note : Ce code est un excellent exemple à montrer en entretien pour démontrer qu'on comprend la différence entre "pouvoir faire" et "devoir faire". 😉