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

Java Discussion :

Méthode bloquante et pool de threads


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Réunion

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Méthode bloquante et pool de threads
    Bonjour,

    Je suis en train de développer une application à l'aide d'une API qui utilise une méthode "getEvent()" bloquante.
    Une fois qu'il y a un événement, la méthode revoit l'event associé.

    Mon but : Attendre qu'un événement se passe, le récupérer, traiter et se remettre en attente.


    1ère solution : lancer UN thread qui bloque sur getEvent(), dès que la méthode se débloque (donc le système reçoit un événement), lancer un nouveau thread à partir d'un pool de thread prédéfini (par exemple un pool de 10 threads )qui traitera l'event récupéré et se rebloquera sur le getEvent() à l'intérieur du 1er thread.
    Le thread qui a récupéré la réponse du getEvent, une fois terminé, se remet en attente.

    2ème solution : lancer un thread unique qui se bloque sur getEvent() et qui traite l'évènement puis se "relance" pour se mettre en attente du getEvent().

    la 2ème solution semble "plus facile" mais elle pose un problème si le traitement prend un peu de temps et donc on pourrait manquer des événements...ce qu'on veut éviter.

    J'aimerais donc si possible avoir votre aide pour savoir comment mettre en place la 1ère solution, je ne suis vraiment pas habitué à utiliser les Threads.

    Très bonne journée,

    Merci.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    "getEvent" bloque sur un événement au sens Java ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    Tu pourrais peut-être utiliser la méthode join() sur un thread pour attendre que son traitement soit terminé avant d'exécuter les instruction qui suivent.
    Sinon tu peux mettre un thread en pause avec suspend() et le relancer avec resume() mais ces méthodes sont dépréciées. :/

    Tu peux éventuellement créer une méthode simple avec un boolean quand getEvent() est actif ou non et mettre un test dans une boucle elle-même dans un de tes threads.

    Je pense que je n'ai pas vraiment répondu à ta question mais peut-être que cela pourra tout de même t'aider.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Aucune chance. Pour gérer les threads de cette manière, il y a deux manières de voir les choses :
    - ThreadPoolExecutor, si un seul thread a le droit d'appeler getEvent() en même temps, pour que ce thread confie le traitement à un pool de threads.
    - Si plusieurs threads ont le droit d'appeler getEvent() en même temps et qu'un seul à la fois obtiendra une réponse, il suffit de créer 10 threads identiques qui bouclent sur, appeler getEvent() puis traiter l'event.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Comment recycler un thread ds un pool de thread
    Par yanis97 dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2006, 18h21
  2. [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
  3. [Thread]Pool de threads
    Par rlnd23 dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 14/02/2006, 16h01
  4. [C#] Aide sur méthode bloquante
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/12/2005, 18h32
  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