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 :

pool de thread et timeout


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 28
    Points : 32
    Points
    32
    Par défaut pool de thread et timeout
    Bonjour,
    je fais des requetes sur différentes machines en parrallèle via un pool de thread. Il peut arriver qu'une machine ne me réponde pas, ou soit trop lente, dans ce cas j'aimerai pouvoir libérer le thread. au bout d'un certain temps.
    voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ExecutorService threadExecutor = Executors.newFixedThreadPool( numberOfThreadMax );  
    for(MonThread thread : threadList)
        threadExecutor.execute( thread ); 
     
    //no more thread to add to the pool so we close the pool
    threadExecutor.shutdown(); 
    //and we wait the end of each thread in the pool	
    try {
          threadExecutor.awaitTermination(threadTimeOut, TimeUnit.SECONDS)	
    } 
    catch (InterruptedException e) {
    logger.error(e);
    throw new ServerErrorException();
    }
    le problème est que le awaitTermination me donne un timeout sur le pool et non pas pour chaque thread.
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Ce n'est pas plutôt dans le "run" de tes Thread que tu devrait vérifier si ton timeout se déclenche ?

    En toute logique à chaque requête tu va avoir un timeout.
    Si sur une requête l'un de ces timeout se déclenche, tu réalise un stop sur le Thread. Ou tu prévient le Thread principale que tu es libre.
    Ce qui permettrai une réaffections dynamique des Thread par exemple.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pour attendre un thread spécifique, tu dois utiliser la méthode submit() à la place d'execute(). Cela te permettra de récupérer un objet Future qui te permettra d'attendre sa fin via la méthode get(long,TimeUnit)



    Maintenant, pour interrompre le thread cela dépend beaucoup du code de ce dernier. Donc le timeout devrait être géré à ce niveau...


    a++

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 28
    Points : 32
    Points
    32
    Par défaut
    Oui j'ai pensé à la solution de mettre le timeout dans le "run" de chaque thread; mais j'aurais préféré centraliser tout et laisser le pool prendre les décisions.
    Si il n'y a pas de solution je ferai ça

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Si un Thread prévient le Thread principale, c'est toujours le Thread principale qui prendra la décision de ce qu'il faut faire.
    Tu serai d’ailleurs plus précis sur le timeout (au niveau des requête et non au niveau du thread en globale)
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Timeout sur pool de threads
    Par ploxien dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 17/08/2007, 15h24
  2. Comment recycler un thread ds un pool de thread
    Par yanis97 dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2006, 18h21
  3. [Info]Création d'un Pool de thread
    Par yanis97 dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 06/03/2006, 18h23
  4. [Thread]Pool de threads
    Par rlnd23 dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 14/02/2006, 16h01
  5. Réponses: 3
    Dernier message: 22/11/2005, 19h23

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