JEP 543 : la concurrence structurée devient définitive dans JDK 28

La JEP 543, « Structured Concurrency », sera intégrée à JDK 28 : l'API StructuredTaskScope sort de preview et devient définitive, « sans autre changement » par rapport à JDK 27. C'est la fin du plus long cycle de preview d'un composant du projet Loom : incubation en JDK 19 (JEP 428) et 20, puis sept previews de JDK 21 à JDK 27.

Le principe est de : traiter « des groupes de tâches liées, exécutées dans des threads différents, comme une seule unité de travail ». Avec ExecutorService et Future, une méthode peut rendre la main alors que ses sous-tâches tournent encore, et une erreur n'apparaît qu'au moment du Future.get(). 

L'échec d'une sous-tâche déclenche l'interruption des autres (annulation coopérative : une sous-tâche qui ignore l'interruption retarde d'autant la fermeture), et le scope ne se ferme pas avant que tous ses threads soient terminés : plus de fuite de thread, et une pile d'appels lisible dans les dumps de threads.

L'exemple de la JEP :

Response handle() throws ExecutionException, InterruptedException {

    try (var scope = StructuredTaskScope.open()) {

        Subtask<String>  user  = scope.fork(() -> findUser());

        Subtask<Integer> order = scope.fork(() -> fetchOrder());

        scope.join();

        return new Response(user.get(), order.get());

    }

} 

Les deux appels partent en parallèle sur des threads virtuels ; join() attend les deux ; si findUser() échoue, fetchOrder() est annulé et l'exception remonte dans handle(). Les objectifs déclarés : « promouvoir un style de programmation concurrente qui élimine les risques courants, fuites de threads et délais d'annulation », et rendre le code concurrent observable.

 JDK 28 est attendu en mars 2027. Le code écrit contre la preview de JDK 27 compile tel quel, sans le flag --enable-preview.

JEP 543 : https://openjdk.org/jeps/543

Actualité par la rédaction de Programmez!

Catégorie actualité: 
Image actualité AMP: 
Espace publicitaire · 300×250