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 régulier 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
    Points : 79
    Points
    79
    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
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    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 régulier 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
    Points : 79
    Points
    79
    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 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    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 régulier 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
    Points : 79
    Points
    79
    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