En Java, le mot-clé synchronisé est utilisé pour protéger les sections critiques du code contre tout accès simultané. Il garantit qu'un seul thread à la fois peut exécuter une méthode ou un bloc synchronisé. Cependant, le comportement des méthodes statiques synchronisées diffère légèrement de celui des méthodes d'instance, car les méthodes statiques n'ont pas d'objet associé.
Question :
Étant donné que les méthodes statiques n'ont pas d'objet associé, comment le mot-clé synchronisé les affecte-t-il ? Plus précisément, se verrouille-t-il sur la classe plutôt que sur un objet ?
Réponse :
Oui. Lorsqu'une méthode statique synchronisée est invoquée, elle acquiert un moniteur associé à l'objet Class pour la classe de la méthode. Cela signifie que plusieurs threads tentant d'exécuter la même méthode synchronisée statique devront acquérir le verrou sur la classe avant de continuer.
Détails :
Comme mentionné dans le langage Java Spécification §8.4.3.6, « Méthodes synchronisées » :
Pour une méthode de classe (statique), le moniteur associé à l'objet Class pour la classe de la méthode est utilisé.
Cela garantit que la synchronisation statique les méthodes peuvent être utilisées pour protéger les ressources associées à la classe elle-même, plutôt qu'à des instances spécifiques. Par exemple, si une méthode statique accède à une variable de comptage partagée au sein de la classe, elle peut être synchronisée pour empêcher plusieurs threads d'y accéder simultanément et de créer potentiellement des incohérences de données.
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!