90 votes

Quelle est la signification du moniteur d'un objet en Java ? Pourquoi utiliser ce mot ?

En lisant des articles sur les threads Java, je remarque souvent l'expression : "current thread is the owner of this object's monitor". J'en comprends le sens : le thread a le droit d'opérer sur l'objet. Mais je me demande pourquoi nous utilisons l'expression "le moniteur de l'objet" au lieu de "le verrou de l'objet" ?

En bref, je ne connais pas le sens du mot "moniteur La question est peut-être étrange et simple. Mais j'espère que quelqu'un pourra m'aider à la résoudre. 3ks

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.

4voto

Aman Points 109

Bien qu'il soit tard pour répondre à cette question, j'ai pensé à l'ajouter au cas où elle serait utile.
Voici un bloc de code Java synchronisé à l'intérieur d'une méthode Java non synchronisée

public void add(int value){
synchronized(this){
      this.count += value;
   }
}

Dans l'exemple, "this" est utilisé, c'est-à-dire l'instance sur laquelle la méthode add est appelée. Une méthode d'instance synchronisée utilise l'objet auquel elle appartient comme objet moniteur.
\=> Un seul thread peut s'exécuter à l'intérieur d'un bloc de code Java synchronisé sur le même objet moniteur.

2voto

kandarp Points 1707

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X