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

Langage Java Discussion :

ThreadPoolExecutor génial, mais comment ça fonctionne?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut ThreadPoolExecutor génial, mais comment ça fonctionne?
    Dans le cadre d 'un TP on doit créer un serveur FTP basique, jusque là rien de bien compliqué. Mais là où je galère un peu c 'est le thread pool... En effet on doit éviter que le serveur ne s' "effondre" sous un aflu de requête => donc là thread pool.

    Un pti bout de code vaut mieux qu'un long discours

    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
     
    ThreadPoolExecutor pool = 
       new ThreadPoolExecutor(corePoolSize,
                            maximumPoolSize,
                            keepAliveTime,
                            timeUnit,
                            new SynchronousQueue<Runnable>());
     
    while (true) {
       try {
          //sock est un ServerSocket déclaré précédement
          sockClientServeur = sock.accept();
          pool.execute(new FtpRequest(sockClientServeur,wdir));
       } catch (IOException e) {
          e.printStackTrace();
       }
    }
    Donc à chaque connexion sur le ServeurSocket, on balance le traitement dans un Runnable de type FtpRequest qui va tout gérer. Mais comment ça fonctionne dans le pool?

    Je veux dire, le but du pool est -notamment- de garder une réserve de thread dans certaines limites pour éviter de les lancer (ce qui est couteux) . Donc après X connexion, c 'est ok j 'ai atteint le corePoolSize. Imaginons un des FtpRequest qui se termine -> il reste alors idle et n'est pas supprimé pour rester dans les bornes corePoolSize/maximumPoolSize. Une nouvelle connexion est établie et... il se passe quoi?

    A) il lance un nouveau thread quand même : pas logique vu la doc
    B) il remplace les paramètres du thread idle par les nouveaux? (aka il arrive à lui refiler la socket?!)
    C) abracadabra?

    je vous avoue que j'ai cherché longtemps mais rien trouvé

  2. #2
    ndp
    ndp est déconnecté
    Membre expérimenté Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Par défaut
    Salut,
    Citation Envoyé par SuperNiKo Voir le message
    ...
    A) il lance un nouveau thread quand même : pas logique vu la doc
    B) il remplace les paramètres du thread idle par les nouveaux? (aka il arrive à lui refiler la socket?!)
    C) abracadabra?
    ...
    Tes objets FtpRequest sont instancies et partages par tous les threads, ce n'est pas forcement toujours le cas, mais ici oui.
    Pour faire simple, la reponse est B) et le passage de parametre entre thread se fait via l'objet FtpRequest.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut
    Question qui me vient à l esprit alors, est ce que c est utile de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pool.prestartAllCoreThreads();
    ?

Discussions similaires

  1. Compilateur asm, comment ça fonctionne ?
    Par AsmCode dans le forum Assembleur
    Réponses: 21
    Dernier message: 30/07/2005, 00h59
  2. [JToolTip] comment ca fonctionne ?
    Par Terminator dans le forum Composants
    Réponses: 2
    Dernier message: 29/05/2005, 16h18
  3. [Chat] Comment faire fonctionner Flash 7 sous Debian ?
    Par piff62 dans le forum Evolutions du club
    Réponses: 22
    Dernier message: 07/03/2005, 16h27
  4. HomeDB, oui mais comment ?
    Par Gregouz dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/10/2004, 16h27
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 15h00

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