Chaque objet est doté d'une sorte de moniteur, qui attend d'être utilisé par un code. En réalité, la plupart des objets ne sont jamais utilisés comme moniteur, donc les moniteurs n'ont pas besoin d'être créés jusqu'à ce qu'ils soient utilisés. Plutôt que d'implémenter cette fonctionnalité en faisant en sorte que chaque objet ait un champ Monitor privé, imaginez qu'elle soit implémentée comme si la JVM disposait d'un HashMap global de moniteurs.
Une mise en œuvre possible est la suivante : Chaque fois qu'un bloc synchronisé est saisi, la JVM recherche l'objet synchronisé dans la carte (moniteurs). Si elle le trouve, elle obtient le moniteur à utiliser. Si elle ne le trouve pas, elle entre dans une section critique dédiée à la carte. Elle recherche alors à nouveau l'objet, car un autre thread peut l'avoir créé entre la vérification précédente et l'entrée dans la section critique. S'il ne le trouve toujours pas, il crée le moniteur pour l'objet synchronisé et quitte la section critique
1 votes
+1 @ulmangt pour avoir été le seul à répondre à votre question : Nous les appelons "moniteurs" parce que c'est ainsi que Hoare les appelait en 1974.