À quoi un moniteur fait-il référence dans la programmation simultanée en Java?
Quand je lis que "chaque objet a associé un moniteur", qu'est-ce que cela signifie?
Est-ce un objet spécial?
Un moniteur est un mécanisme permettant de contrôler l'accès simultané à un objet.
Cela vous permet de faire:
Fil 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Fil 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Cela empêche les unités d'exécution 1 et 2 d'accéder en même temps à la section surveillée (synchronisée). L'un démarrera et le moniteur empêchera l'autre d'accéder à la région avant la fin de la première.
Ce n'est pas un objet spécial. C'est un mécanisme de synchronisation placé à la racine de la hiérarchie des classes: Java.lang.Object
.
Il existe également des méthodes wait
et notify
qui utiliseront également le moniteur d'objet pour la communication entre différents threads.
Un moniteur est une entité qui possède un ensemble d'attente et un ensemble d'attente . . En Java, tout Object
peut servir de moniteur.
Pour une explication détaillée du fonctionnement des moniteurs en Java, je vous recommande de lire la section Mécanique du moniteur de Programmation simultanée en Java (le lien précédent affiche l'aperçu dans Google Livres et cette section est disponible pour la lecture).
Le Java) langage et système d’exécution prend en charge la synchronisation des threads via l’utilisation de moniteurs.
Un moniteur est associé à une donnée spécifique (une variable de condition) et fonctionne comme un verrou sur ces données. Lorsqu'un thread détient le moniteur pour un élément de données, d'autres threads sont verrouillés et ne peuvent ni inspecter ni modifier les données.
http://Java.Sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Un mécanisme pour contrôler l'accès aux objets un à un
Monitor est une structure de synchronisation qui permet aux threads d'avoir à la fois une exclusion mutuelle et la possibilité d'attendre (bloquer) qu'une condition donnée devienne vraie.
Les moniteurs disposent également d'un mécanisme permettant de signaler aux autres threads que leur condition est remplie. C'est une entité qui possède à la fois un verrou et un ensemble d'attente. En Java, tout objet peut servir de moniteur.
Dans la machine virtuelle Java), chaque objet et classe est associé logiquement à un moniteur. Pour implémenter la capacité d'exclusion mutuelle des moniteurs, un verrou (parfois appelé mutex) est associé à chaque objet et classe. Ceci s'appelle un sémaphore en termes de systèmes d'exploitation, mutex est un sémaphore binaire.
http://journals.ecs.soton.ac.uk/Java/tutorial/Java/threads/monitors.html
monitor est associé à un objet ou à un membre de données, qui est acquis lorsqu'un membre de données ou un objet est entré, est un bloc de synchronisation (section critique) et libéré à la sortie.