IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

synchronized, verrou sur méthode ou toute l'instance?


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Par défaut synchronized, verrou sur méthode ou toute l'instance?
    Bonsoir
    Disons que j'ai une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class MaClasse {
     
       public synchronized void afficher() {
          ...
       }
     
       public synchronized void modifier() {
          ...
       }
     
    }
    voilà, disons que j'ai deux thread A et B qui utilisent une instance de MaClasse X.
    Quand A appelle X.afficher() ; on dit que l'instance X pose un verrou, dejà le verrou est posé ou, sur la méthode ? ou bien sur toutes les méthodes synchronized?
    d'une autre manière si:
    le thread A appelle X.afficher(); est ce qu'il est possible que le thread B appelle X.modifier() (avant que la méthode X.afficher() n'ai finit )
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par 0redd Voir le message
    voilà, disons que j'ai deux thread A et B qui utilisent une instance de MaClasse X.
    Quand A appelle X.afficher() ; on dit que l'instance X pose un verrou, dejà le verrou est posé ou, sur la méthode ? ou bien sur toutes les méthodes synchronized?
    d'une autre manière si:
    le thread A appelle X.afficher(); est ce qu'il est possible que le thread B appelle X.modifier() (avant que la méthode X.afficher() n'ai finit )
    Merci d'avance
    salut. avec le mot clé synchronized (utilise le concept des moniteurs connu pour les SE), le verrou protège toute la méthode
    ce qui est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void nomMéthode()
    {
     verrou.lock();   
      [..code méthode..]
      verrou.unlock();
    }
    si une méthode synchroinized est "pris" par un thread A, les autre threads restent en attentes et seront débloqués lorsque A appelle notifyAll() (à la fin du code )

  3. #3
    Membre confirmé Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Par défaut
    les autres threads seront bloqués même pour appelé une autre méthode synchronized? autre que lire(c'elle qui est utilisé par A) ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par 0redd Voir le message
    les autres threads seront bloqués même pour appelé une autre méthode synchronized? autre que lire(c'elle qui est utilisé par A) ?
    Oui.

    Déclarer une méthode d'instance synchronized, est équivalent d'entourer le corps de cette méthode par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    synchronized(this) {
     
     // Corps de la méthode
     
    }

    (Dans le cas d'une méthode statique, le mot-clé synchronized est équivalent de synchroniser sur l'objet Class qui représente la classe.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Par défaut
    merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/06/2012, 16h03
  2. [Thread][synchronized] precision sur le verrou
    Par moris113 dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 15/10/2008, 10h17
  3. [C#] Aide sur méthode bloquante
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/12/2005, 18h32
  4. Pointeur de fonctions sur méthode
    Par Glosialabolas dans le forum C++
    Réponses: 9
    Dernier message: 04/12/2005, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo