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]wait() sur un processus autre que celui courant


Sujet :

Concurrence et multi-thread Java

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [THREAD]wait() sur un processus autre que celui courant
    Bonjour à tous,

    Je travaille actuellement sur un projet et je dois m'occuper de la gestion de la concurrence.

    J'ai une classe principale "Controller" qui gere le lancement et la mise en pause de processus. Mes processus sont des instances d'une classe "worker" qui hérite de Thread.

    Controller lance les processus (avec start()) et ceux-ce s'arretent (avec wait()), Controller les débloque un par un (avec un notify()). Seulement les processus ont un temps maximal pour s'executer. Si ce temps est atteint, je dois l'arreter et il reprendra son execution la ou il s'est arrêté au prochain tour.

    Mon problème est que lorsque Controller tente d'arrêter un processus au bout d'un certain temps, ce n'est pas un Worker qui s'arrete mais Controller lui-même.

    Est-ce mon utilisation de wait() et notify() qui est fausse ou faut-il passer par une autre facon de faire?


    Merci d'avance pour vos réponses.


    P.S. j'ai mis un code d'exemple que j'utilise pour tester la gestion que je dois faire
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    En fait lorsque tu veux arrêter un Worker tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     synchronized (wrk[i]) {
          wrk[i].wait();
     }
    Vu que de son coté le worker fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public void askNextState() {
          synchronized (this) {
             try {
                System.out.println("-" + getName()+"- Sleeping");
                wait();
             } catch (InterruptedException e) {
                e.printStackTrace();
             }
          }
       }
    He bien le controller attend la fin d'un worker qui lui même attend sur un wait. Je dirai que tu as un beau dead lock

    Sinon si tu veux interrompre ton worker tu devrais faire Et dans ton code gérer l'exception InterruptionException au lieu de l'ignorer.

    De plus, dans ton worker, si tu fais pas mal de boulot dans une boucle tu peux tester si le controller veux t'interrompre avec isInterrupted.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2010, 22h43
  2. Réponses: 3
    Dernier message: 17/09/2009, 13h29
  3. cherche livres sur python autres que celui de swinnen
    Par ghafiki dans le forum Général Python
    Réponses: 9
    Dernier message: 10/06/2009, 03h00
  4. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59

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