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]run une fois et plus apres


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut [Resolu][Thread]run une fois et plus apres
    Salut à tous,

    Je débute dans le multi-threading et j'ai un petit problème.

    Mon programme doit scruter en permanance un répertoire et déplacer les fichiers présents sous certaines conditions.

    J'ai donc bien mon thread principal qui scrute toutes les 10 secondes mon répertoire. J'ai une classe qui contient une hashtable où sont stocké les threads qui vont travailler chacun sur un des fichiers (5 maximum).

    Donc je trouve un fichier -> je prends un thread libre dans mon pool -> j'appelle la méthode start du thread -> le run est executé et appelle les fonctions de traitement

    Tout se passe bien la premiere boucle, mes 5 premiers fichiers sont traités. Pour les fichiers suivants les threads n'ayant pas fini leur traitement, il ne se passe rien, ca c'est normal. Boucle suivante, les 5 premiers fichiers sont affectés aux threads libres, ca c'est bon. J'appelle la méthode start mais je ne vais jamais dans le run.

    Comment est ce que je peux faire pr m'en sortir? Si j'appelle la méthode run directement, les commandes sont executées les unes à la suite des autres sans multi-threading.

    Merci pr vos réponses
    Tout probleme a une solution.

  2. #2
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Je pense avoir trouvé une solution de contournement mais c'est pas propre. J'en ai déduit que je pouvais pas faire start() deux fois meme si mon thread c'etait arreté car la méthode run était terminé.

    J'ai donc fait une boucle infini dans mon run, qui n'execute que le traitement que quand une variable a une certaine valeur. Lorsque le thread a fini son job, je change cette valeur pour qu'il puisse etre affecté à un autre fichier. Dès que le thread est affecté je lui remet l'ancienne valeur.

    Ca marche bien mais il risque d'y avoir des problèmes de concurrence d'accès à la valeur de test
    Tout probleme a une solution.

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    en fait, une fois que la méthode run d'un thread est terminée, le thread est mort et ne peut plus être lancé

    il faut le ré-instancier pour pouvoir à nouveau le lancer avec start()

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  4. #4
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Ok, mais est ce que ca n'entre pas en contradiction avec le fait d'avoir un pool de thread? Car une fois qu'un thread est terminé il ne sert plus à rien, d'où l'inutilité de le stocker dans un pool
    Tout probleme a une solution.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    J'ai les modifs nécessaires pr réinstancier mes threads, donc ca marche bien.
    Merci pr ton aide.
    Tout probleme a une solution.

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

Discussions similaires

  1. Appeler une fois de plus une fonction() sur un temps donné
    Par Tendhor57 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/01/2013, 09h58
  2. serveur dédié : encore une fois de plus la même question
    Par duboisa dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 27/01/2011, 13h40
  3. [MySQL] changer de style une fois sur 2 après requête
    Par mussara dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/12/2005, 21h55

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