web-dev-qa-db-fra.com

Qu'est-ce qu'un moniteur en Java?

À 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?

111
xdevel2000

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.

78
Pablo Santa Cruz

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).

24
JRL
  1. Un moniteur est un concept/mécanisme qui ne se limite pas au Java Langage;
  2. "En programmation simultanée, un moniteur est un objet ou un module destiné à être utilisé en toute sécurité par plusieurs threads";
  3. Comme tous les lecteurs le savent, chaque objet de Java est une sous-classe de Java.lang.Object. Les Java ont créé Java.lang.Object une manière dont il a des caractéristiques et des caractéristiques qui permettent aux Java) d’utiliser tout objet comme moniteur. Par exemple, chaque objet a une file d’attente, une file de ré-entrée et des méthodes d’attente et de notification c'est un moniteur;
  4. lire sur les moniteurs ici .
9
mgibson

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.

4
user7587921

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

3
naikus

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.

Pour plus d'informations, consultez le lien

2
Swati Gour

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.

1
Amit Rai