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

Concurrence et multi-thread Java Discussion :

[Thread][synchronized] Pb d'executions simultanees d'une methode


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut [Thread][synchronized] Pb d'executions simultanees d'une methode
    Bonjour,

    J'ai un probleme avec un fonction qui devrais etre synchroniser. elle ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public synchronized boolean Load(int _ImageFormat, Buffer _Buffer)
    {
    	System.out.println("IMAGE_LOAD IN");
    	//Traitements
    	System.out.println("IMAGE_LOAD OUT");
    }
    Le probleme est que quand j'execute mon programme, j'obtient un truc qui ressemble à ca :

    IMAGE_LOAD IN
    IMAGE_LOAD OUT
    IMAGE_LOAD IN
    IMAGE_LOAD OUT
    IMAGE_LOAD IN
    IMAGE_LOAD IN
    IMAGE_LOAD OUT
    IMAGE_LOAD OUT

    IMAGE_LOAD IN
    IMAGE_LOAD OUT
    IMAGE_LOAD IN
    LOAD_FILE IN
    etc ...

    Comment est ce possible ? Le mot clef synchronized ne devrais pas empecher 2 instance de cette fonction de s'executer en meme temps ?

    J'y comprend pu rien ...

    merci de votre aide

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Modification du titre
    Les Règles du Forum
    J'aime pas les épinards... Mais alors pas du tout

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Questions:

    Tu as plusieurs objets de ce type dans ton appli ?

    Ya quoi dans tes traitements ? pas de wait ?

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre habitué Avatar de XristofGreek
    Inscrit en
    Août 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 164
    Points : 174
    Points
    174
    Par défaut
    Le mot clef synchronized ne devrais pas empecher 2 instance de cette fonction de s'executer en meme temps ?
    Non ! deux instances d'objets peuvent très bien appeler cette fonction en même temps.En revanche cela empechera à plusieurs Thread d'acceder en même temps à cette fonction mais pour UNE instance d'objet
    les gens qui s'ennuient sont des gens sans imagination.

  4. #4
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Oui en effet j'ai plusieurs objets qui apellent cette fonction...

    Il n'existe aucune méthode pour empecher 2 objets différents d'acceder à une meme fonction ???

    Le probleme c'est que j'ai créer un systeme de lecture d'images qui DOIT etre lancer 1 par un (pour un souci de consommation mémoire, je travail dans un buffer en statique qui reste allouer).
    Du coup si 2 chargements se font en meme temps les 2 objets ecrivent en meme temps dans mon buffer et j'obtient des images mélangés.
    J'avais penser que mettre la fonction de chargement en synchronized serait suffisent mais non...

    Quelqu'un à une piste a suivre pour moi svp ???

    Merci d'avance
    J'aime pas les épinards... Mais alors pas du tout

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Le synchronized se fait sur un objet .. si il est applique a une methode c'est l'instance de l'objet qui est utilise.

    Donc plusieurs objets, plusieurs synchronized, un par objet

    Si ta methode Load (d'ailleurs elle devrait s'appeler load, les majuscules en debut sont reservees pour les objets ) peut etre static alors met la static cela devrait resoudre ton probleme.

    Astuce: si tu as besoin de plusieurs synchronized different tu peux faire par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private (static) String sync1 = new String("SYNC");
     
    private (static) String sync2 = new String("SYNC");
     
     
    ...
    synchronized(sync1)
    {
    }
     
    synchronized(sync2)
    {
    }
    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Comme tu me l'as conseiller je suis passer par une fonction statique et tout fonctionne impecable

    Merci encore
    J'aime pas les épinards... Mais alors pas du tout

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

Discussions similaires

  1. [Exécutable]lancement d'une application
    Par jesus144 dans le forum Général Java
    Réponses: 9
    Dernier message: 08/06/2005, 10h08
  2. [Thread][SYNCHRONIZED] problème de synchornisation
    Par _Eric_ dans le forum Général Java
    Réponses: 9
    Dernier message: 15/03/2005, 10h59
  3. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 10h51
  4. [thread] synchronize ou pas ?
    Par dvarrel dans le forum Langage
    Réponses: 4
    Dernier message: 26/07/2004, 19h09
  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