Java 21 : threads virtuels, collections séquencées et limites des previews
Les threads virtuels, collections séquencées, motifs de record et filtrage par motif dans switch sont des fonctions définitives du JDK 21, utilisables sans options de preview. Les String Templates étaient encore en preview dans cette version ; une mise à niveau du JDK ne donne pas à chaque nouvelle fonction le même statut de stabilité. Les notes de version du JDK 21 distinguent fonctions définitives, previews et incubation.
Java 21 est devenu généralement disponible le 19 septembre 2023. Cet article revient sur cette version avec un exemple reproductible. Il ne recommande ni le dernier JDK ni une version corrective pour la production.
Déroulement
Le flux suit Jdk21Example sans options de preview. La liste inversée est une vue et join attend la sortie du thread virtuel.
Statut des fonctions dans JDK 21
| Fonction | Statut dans JDK 21 | Points à vérifier |
|---|---|---|
| Threads virtuels | Définitif | À envisager pour de nombreuses tâches dominées par les E/S ; aucun gain de calcul CPU garanti |
| Collections séquencées | Définitif | API cohérentes pour les premiers/derniers éléments et les vues inversées |
| Motifs de record et filtrage par motif dans switch | Définitif | Décomposer des valeurs et brancher selon des motifs |
| String Templates | Preview | Ne pas présumer de leur maintien dans les JDK suivants |
| Concurrence structurée | Preview | Évaluer séparément de la finalisation des threads virtuels |
| Vector API | Sixième incubation | Distinguer API en incubation, fonctions définitives et previews |
Cette liste est une sélection. Les notes de version du JDK 21 précisent aussi les statuts de preview et d’incubation. Consultez les changements du langage Java 21 pour les fonctions du langage. Les String Templates n’ont pas été inclus dans JDK 23 ; voir leur historique et les alternatives standard.
Compiler sans options de preview
Le code suivant a été exécuté localement sur Zulu JDK 21.0.1. Cette ancienne version corrective consigne l’environnement de reproduction, sans constituer une recommandation de production. Vérifiez d’abord que javac et java utilisent la même installation JDK 21.
Jdk21Example.java
import java.util.ArrayList;
import java.util.List;
public class Jdk21Example {
record Point(int x, int y) {}
static String describe(Object value) {
return switch (value) {
case null -> "missing";
case Point(int x, int y) -> "point=" + x + "," + y;
default -> "other";
};
}
public static void main(String[] args) throws InterruptedException {
var names = new ArrayList<>(List.of("alpha", "beta", "gamma"));
var reverse = names.reversed();
names.set(0, "ALPHA");
System.out.println(names.getFirst() + "/" + names.getLast());
System.out.println(reverse);
System.out.println(describe(new Point(2, 3)));
System.out.println(describe(null));
Thread worker = Thread.ofVirtual().start(() ->
System.out.println("virtual=" + Thread.currentThread().isVirtual()));
worker.join();
}
}
javac --release 21 Jdk21Example.java
java Jdk21Example
ALPHA/gamma
[gamma, beta, ALPHA]
point=2,3
missing
virtual=true
reversed() renvoie une vue inversée, pas une copie indépendante. Après modification du premier élément de la liste d’origine, le dernier élément de la sortie inversée devient aussi ALPHA. Appeler getFirst() sur une collection vide lèverait une exception ; cet exemple utilise une liste non vide. L’API SequencedCollection définit le contrat de la vue.
Point(int x, int y) est un motif de record et case null traite séparément l’entrée null. Le thread virtuel affiche la dernière ligne et join() attend sa fin. Cela vérifie le comportement des API sans mesurer débit ni latence. Le guide des threads virtuels explique leur intérêt pour une concurrence dominée par l’attente d’E/S.
Avant de changer l’environnement d’exécution d’une application, vérifiez la compatibilité JDK 21 du framework, des outils de build et des agents d’instrumentation. Le statut des fonctions et la durée de support d’un distributeur sont deux questions distinctes. L’historique de Temurin 21 et la sélection des binaires expliquent comment vérifier ce qu’un distributeur a réellement publié.
Discussion