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

Langage Java Discussion :

Les différentes portées de Synchronized ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut Les différentes portées de Synchronized ?
    Bonjour à tous.
    Je n'est jamais utilisé (explicitement) de threads jusqu'à maintenant, et je suis conscient que c'est une sacrée lacune.
    Je me suis donc mis à étudier leur fonctionnement, mais un flou persiste sur le mot-clé Synchronized.

    1èrement, je n'ai pas trouvé de récapitulatif sur les différentes portées du mot-clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // 1er cas :
    Synchronized Objet o;
    
    // 2ème cas :
    void uneMethode() {
         //instructions
    
         Synchronized (unObjet) {//instructions}
    
         // insrtuctions
    }
    
    // 3ème cas :
    Synchronized void autreMethode() {//instructions}
    Est-ce tout ??

    Appliqué à une méthode (y compris Static), j'en ai compris le fonctionnement, la documentation ne manque pas à ce propos. Mais dans les autres cas, je n'ai pas trouvé grand chose, et ne sais pas sur quoi et comment s'applique le verrou...

    Quelqu'un pourrait-il me dire où trouver un résumé de tout cela (ou m'en faire un ) ?

    Autre petite question, avec Java 5.0 et notamment le package java.util.concurrent, n'est-on pas appelé à se passer de Synchronized ?

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    J'avoue n'avoir jamais entendu parler du 1er cas. Où l'as tu trouvé ?

    Pour le deuxième, le verrou est simplement l'objet donné en paramètre (si l'on peut dire), et pour le troisième, le verrou est this.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Pour le deuxième, le verrou est simplement l'objet donné en paramètre (si l'on peut dire)
    Je me doutais bien que c'était quelque chose comme ça
    Plus précisément (toujours pour le cas 2), l'accès à unObjet est impossible tant que les instructions "synchronisées" ne sont pas terminées ? ou alors ce sont juste les méthodes synchronisées de unObjet qui sont bloquées durant l'exécution des instructions synchronisées ?

    Pour le cas 1, je l'ai trouvé dans un petit tuto qui ne reparle plus de ce cas après...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    synchronized objet
     
    synchronized (expression){
      ...
    }
     
    public void nomMethode(String[] tableau) {
      synchronized (tableau){
        // Instructions...
      }
      ...
    }

  4. #4
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par marchand de sable
    Autre petite question, avec Java 5.0 et notamment le package java.util.concurrent, n'est-on pas appelé à se passer de Synchronized ?
    On pourrait effectivement se passer de syncronized si et seulement si on est sùr qu'à n'importe quel moment, il y a un unique thread en execution (à part l'EDT bien sùr). Mais dès que le nombre de thread est supérieur ou égal à deux, il devient très dur de se passer de syncronized.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Oups, j'avais l'impression que ce package permettait de gérer la synchronisation et les priorités des différents threads....
    Décidément, il me reste du travail avant de maîtriser tout ça

    Sinon, pas de précisions (ou de liens) pour les cas 1 et 2 ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le 1er cas n'est pas possible, et provoque une erreur de compilation...

    Pour le second cas, le lock est simplement placé sur la référence de unObjet (un seul thread peut poser un lock sur la même référence en même temps)...

    Citation Envoyé par marchand_de_sable
    Oups, j'avais l'impression que ce package permettait de gérer la synchronisation et les priorités des différents threads....
    C'est bien cela, mais cela offre des fonctionnalité avancées. Ce n'est pas pour autant que le mot clef synchronized devient inutile...

    a++

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/08/2005, 12h42
  2. Récupérer les différentes températures de mon PC
    Par bronco dans le forum Assembleur
    Réponses: 2
    Dernier message: 29/07/2005, 09h35
  3. Réponses: 3
    Dernier message: 24/05/2005, 12h35
  4. [Débutant] Les opcodes sur les différents processeurs
    Par loverdose dans le forum Assembleur
    Réponses: 11
    Dernier message: 03/02/2005, 13h32
  5. faire un group by sur les différents niveau de code
    Par speed034 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/10/2004, 16h10

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