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

Entrée/Sortie Java Discussion :

shutdown Thread pool and sockets


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut shutdown Thread pool and sockets
    Bonjour,

    Voilà mon souci, c'est que j'ai besoin de faire un shutdown propre de tout ce qui a été ouvert. je m'explique :

    J'ai une appli server (socketServer : dbServer), à chaque nouvelle connexion d'un client je crée un Thread (via le thread pool) qui va traiter les requête de ce client, etc.

    A un moment donné un threadclient recoit un requêt 'shutdown' donc, je dois arreter toute les socketService déjà acceptée/ouvertes, arreter tout les threads clients déjà ouverts, et enfin arreter la socketServer (dbServer) en sortant du while...voir code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    //Code dbServer:
     
    try 
    {				
      //Create a new thread pool
      ExecutorService threadPool = Executors.newCachedThreadPool();
     
      while(!listening) 
      {
       //Wait for a client connection
       Socket socketService=null;
       socketService= serverSocket.accept();
     
      // démarer le thread client qui va traiter les requêtes
      threadPool.execute(new ClientDBThread(socketService,threadPool));
     
     }
     
    }
    catch (IOException eIO) 
    {
     
      System.err.println("DbServer issue : "+eIO.getMessage());
      System.exit(-1);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    //thread client :
     
    ClientDBThread(Socket socket,ExecutorService threadPool) 
    {
      //Allocate a new thread with name "ClientConnection"
      super("ClientConnection");
      this.socketClient = socket;
      this.threadPool=threadPool;
    }
     
    @Override
    public void run() 
    {
     
     while(listening) 
     {
     
      System.out.println("start shutdown......");
     
     
      //close all client socket
      ????socket.close() //but this only for the current socket not for all the others :(
     
      //Close all the client threads
      threadPool.shutdown();
     
     //Return to dbServer and exit the wile??
     ???
     
     }
    Je ne sais pas si c'est clair mais je suis vraiment bloqué (((
    Merci d'avance.......

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Je ne comprend pas tout dans tes explications... En gros tu créer une liste d'objets (ici de thread contenant des sockets ?) et tu souhaite plus tard, les fermer proprement avant de tuer les thread ?

    Si c'est bien cela, je verrais 2 moyens de faire :

    - soit chaque thread éxécute lui même une fermeture des socket quand on lui demande de se stopper (donc possible en surchargeant ta méthode d'arrêt du thread, stop() il me semble...)

    - soit chaque fois qu'un thread crée des sockets, tu stock ces dernières dans une liste, et avant de tuer les thread, tu ferme toutes tes sockets en parcourant ta liste.

    Voila, c'est les deux idées qui me sont passés par la tête... en supposant que j'ai compris le problème

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    J'ai fais plus simple, je passe tout en paramètres au thread crée (le threadPool, la socketServer, la list des thread) puis quand je reçois une requête shutdown, je fais ceci dans le thread qui traite cette requête :

    1) destroy db connection pool

    2) fermer toute les socket de chaque thread en utilisant la list des thread

    3) fermer la socket server

    Le seul truc qui me gène ici c'est que je passe beaucoup de choses en paramètre (dans le constructeur du thread) mais bon ça marche donc je ne vais pas me prendre la tête. A moins qu'il y'a dautres idées plus performantes, je suis preneur..

Discussions similaires

  1. [QThread] Thread et pool de sockets
    Par AureK dans le forum Multithreading
    Réponses: 1
    Dernier message: 18/06/2013, 20h45
  2. tuer un thread en attente (socket)
    Par LesLemmings dans le forum Visual C++
    Réponses: 1
    Dernier message: 18/03/2007, 09h50
  3. [Thread]Pool de threads
    Par rlnd23 dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 14/02/2006, 16h01
  4. Les threads et les sockets
    Par pier* dans le forum Développement
    Réponses: 4
    Dernier message: 09/01/2006, 11h44
  5. [Threads] suspend and resume
    Par el3gans dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 19/09/2005, 20h56

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