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 :

Thread : mot clé synchronized


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Points : 27
    Points
    27
    Par défaut Thread : mot clé synchronized
    Bonjour !

    Je n'arrive pas à comprendre pourquoi ce bout de code n'est pas juste dans un environnement multi-thread, pouvez-vous m'éclairer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    public class Cpt implements Runnable {
     
    private Thread t;
    private static int compteur = 0;
     
    public Cpt(){
    t = new Thread(this);
    }
     
    public void run(){
    synchronized(this)
    cpt++;
    System.out.println(cpt);
    }
     
     
    }

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    On ne va pas deviner ce que devrait faire ce bout de code.
    Le Thread t c'est un peu n'importe quoi, et le compteur on ne le voit modifier qu'une fois.

    Mais bon, je vois que le compteur est static, donc l'idée est probablement d'avoir plusieurs objets Cpt, et que chacun soit utilisé dans des threads différents.

    Dans ce cas c'est simple, pour écrire dans une variable partagée entre threads, il faut synchroniser l'accès à cette variable, à l'aide d'un objet partagé entre tous les threads.
    Or là tu utilises this pour synchroniser. Donc seuls les threads qui utilisent ce même objet Cpt sont synchronisés. Ceux qui en utilisent un autre ne sont pas concernés.
    Il aurait fallu synchroniser sur Cpt.class au lieu de this, ou passer par une méthode synchronized static (ce qui fait la même chose.)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    Oh oui c'est vrai que mon exemple est incomplet

    Merci pour cette explication

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

Discussions similaires

  1. mot clé synchronized
    Par cycloop dans le forum Général Java
    Réponses: 3
    Dernier message: 02/04/2012, 11h38
  2. Java mot clé synchronized
    Par maurojeff dans le forum Général Java
    Réponses: 4
    Dernier message: 13/10/2011, 12h38
  3. Mot clé "Synchronized"
    Par wariom dans le forum Langage
    Réponses: 5
    Dernier message: 11/07/2008, 16h31
  4. [Thread]Accès concurrentiel -> Synchronized
    Par m@t dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 12/12/2005, 12h21
  5. [Thread] Synchronize
    Par Pedro dans le forum Langage
    Réponses: 9
    Dernier message: 06/07/2004, 13h30

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