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

JBuilder Java Discussion :

les exceptions en utilisant les threads


Sujet :

JBuilder Java

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut les exceptions en utilisant les threads
    salut
    moi j'ai un probleme lors de l'exécution de mon application (sous jbuilder9), j'utilise des threads et pdt l'éxécution j'ai une exception qui est affiché

    java.lang.IllegalMonitorStateException: current thread not owner
    at java.lang.Object.notify(Native Method)

    malgrés que j'ai utilisé la methode synchronized
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    synchronized (this){
    try {this.wait();}
    catch (InterruptedException ex4){}
    }
    synchronized (this){
    try {this.notify();}
    catch (InterruptedException ex4){}
    }
    merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    on peux voir le vrai code? Ce message s'affiche quadn tu fait un wait ou notify sans être le owner de l'objet sur lequel tu le fait (via synchronized)

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut exception en utilisant les threads
    oui bien sur voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Frame2.fin+=1;
                Frame2.file_global[Frame2.fin]=thisreq;
                synchronized(Frame2.file_global[Frame2.fin]){
                  try{Frame2.file_global[Frame2.fin].wait();}
                  catch(InterruptedException ex4){}
                }
    la file globale c'est pour bloquer les requetes (les requetes sont des threads)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si, comme je l'ai bien compris, ce code est exécuté par plusieurs threads en parallèle, ton problème est que tu ne fait pas de synchronized sur un lock global avant de tripatouiller ta liste. Résultat, entre ces deux lignes

    synchronized(Frame2.file_global[Frame2.fin]){
    try{Frame2.file_global[Frame2.fin].wait();}

    Frame2.fin peut avoit changé et tu fait donc le wait sur un objet différent de celui du synchronized.

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut exception en utilisant les threads
    j'ai pas su où je dois placé exactement synchronized();
    pouvez vs m'expliquer plus S.V.P c'est vraiment urgent

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    affiche ton code dans ton ensemble, notement avec les différents thread impliqués

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut les exceptions en utilisant les threads
    mon prg est trop long, je ne eut pas l'afficher ds l'ensemble
    mais j'ai une question est ce que on peut remplacer wait() par suspend() et replacer notify () par resume () ????????

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    suspend et resume sont dépréciés, donc à ne pas utiliser. Comme je l'ai dit, ton problème, c'est que ton tableau est suceptible de changer au cours de l'opération (c'est à dire entre le synchronized et le wait) et donc tu fait ton wait sur un objet autre que celui pour lequel tu fait un synchronized. Sans plus de code, difficile d'en avoir la certitude. un solution serait de récupérer l'objet de ton tableau à part, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    synchronized(Frame2.file_global){  // si plusieurs threads manipulent un objet, toujours synchroniser ses modifications!
      Frame2.fin+=1;
      Frame2.file_global[Frame2.fin]=thisreq;
    }
    synchronized(thisreq){ 
                  try{thisreq.wait();}
                  catch(InterruptedException ex4){}
                }
    Note: ca suppose que thisreq est bien une varible locale!

Discussions similaires

  1. Utiliser les exceptions sans sortir
    Par omelhor dans le forum Langage
    Réponses: 0
    Dernier message: 06/06/2011, 09h37
  2. [POO] Quand utiliser les Exceptions?
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 2
    Dernier message: 20/06/2007, 08h40
  3. Utiliser les exceptions
    Par Pierre Levy dans le forum C++Builder
    Réponses: 8
    Dernier message: 24/03/2007, 09h50
  4. [C#] Quand et où utiliser les exceptions ?
    Par wiLL_ dans le forum C#
    Réponses: 3
    Dernier message: 12/02/2006, 17h34
  5. Utiliser les exceptions pour un traitement particulier ?
    Par Blustuff dans le forum Assembleur
    Réponses: 11
    Dernier message: 01/12/2004, 02h21

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