Maison >Java >javaDidacticiel >Pourquoi la synchronisation sur des objets chaîne en Java est-elle problématique ?
Synchronisation sur des objets String en Java
Comprendre pourquoi la synchronisation sur des objets String en Java peut être problématique est à la base du problème que vous avez rencontré. Par défaut, les objets String sont passés par référence, ce qui signifie que la référence au même objet String est partagée entre différentes parties du programme. Cela peut entraîner un comportement inattendu lorsque plusieurs threads tentent d'accéder simultanément au même objet String.
La clé pour résoudre ce problème réside dans la compréhension que l'interne des objets String garantit qu'ils sont uniques pour chaque valeur. Les objets Intern String sont stockés dans un pool au sein de la machine virtuelle Java (JVM), et toute tentative ultérieure de création d'une chaîne avec la même valeur renverra une référence à la chaîne interne au lieu de créer un nouvel objet. Cela garantit qu'il n'y a qu'une seule instance de chaque valeur de chaîne unique dans la JVM.
En utilisant des chaînes internes, vous pouvez vous assurer que la clé que vous utilisez pour la synchronisation est unique et que tous les threads obtiendront une référence à la même objet. Cela entraînera le comportement attendu, où un seul thread à la fois entre dans le bloc synchronisé pour effectuer l'opération get/set.
Pour interner un objet String, vous pouvez utiliser la méthode intern(). Voici un exemple :
final String key = "Data-" + email; final String internedKey = key.intern();
En interneant la chaîne de clé, vous créez un objet unique pour celle-ci, et toute tentative ultérieure de création d'une chaîne avec la même valeur renverra le même objet interne. Cela garantit que la référence à la clé est cohérente dans tous les threads, conduisant à une synchronisation appropriée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!