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 :

Transformation boucle while en action multi-thread


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut Transformation boucle while en action multi-thread
    Bonjour,

    je dois parcourir une collection pour créer un ArrayList avec chacun des éléments de la collection, en effectuant quelques opérations sur ces éléments.

    Les opérations sont longues.

    Je voudrais exécuter chaque item de la boucle en parallèle.

    Ainsi pour chaque col.next je voudrais lancer un nouveau thread qui retourne le résultat et permet de l'ajouter à l'ArrayList.

    La méthode se terminerait lorsque toute la collection a été parsée.

    Existe-t-il un pattern permettant d'effectuer cet amélioration?

    Mon code ressemble donc à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    ArrayList al = ...;
     
    while (col.next()) {
          String a = col.getString("a");
          int b = col.getInteger("b");
          String c = doSomething(a, b);
     
          al.add(dsr);
     
    }
     
    return al;
    Comment faire pour que chaque item de la boucle soit effectué par un thread différent, et pour que la liste soit bien remplie à la fin?

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    C'est quoi la variable "dsr" ? Elle est crée à quel moment ?

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    A supposer qu'il soit pertinent de paralléliser:

    Enrober le code de calcul dans une classe X qui étends Runnable

    Créer avant la boucle un ThreadPoolExecutor de taille donnée (à déterminer).

    Pour chaque row rencontré, ajouter une nouvelle instance de X à l'executor (méthode execute)

    après la boucle, attendre que l'executor aie fini le travail.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    A supposer qu'il soit pertinent de paralléliser:

    Enrober le code de calcul dans une classe X qui étends Runnable

    Créer avant la boucle un ThreadPoolExecutor de taille donnée (à déterminer).

    Pour chaque row rencontré, ajouter une nouvelle instance de X à l'executor (méthode execute)

    après la boucle, attendre que l'executor aie fini le travail.
    Merci,

    effectivement c'est la logique des threads.
    Je ne suis pas sûr qu'il soit pertinent de paralléliser. Peut-être que je vais laisser cela pour le moment et revenir dessus quand j'aurai plus d'information.
    Je m'attendais à trouver un petit pattern, mais en fait ma question est tellement générale que je ne crois pas qu'il en existe de si générique.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut clôture de la question
    bon, comme dit ci-dessous, il faut tout d'abord vérifier si c'est pertinent de sérialiser... et malheureusement je n'arrive pas à déterminer cela pour le moment (surtout par manque de temps de réflexion en fait).
    Ayant pu grandement optimiser ma boucle par ailleurs, je ne vais pas utiliser les threads pour le moment.

    Je passe quand même la question à résolue car l'architecture demandée est en fait expliquée dans tous les tutoriels sur les threads, et il s'avère que ma question était donc mal posée.

    Merci!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut
    Citation Envoyé par Mathieu.J Voir le message
    C'est quoi la variable "dsr" ? Elle est crée à quel moment ?
    Je me suis trompé en adaptant mon code. La variable dsr ici est la String c.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2012, 19h52
  2. Action "onclick" dans boucle "while"
    Par ZeeBee dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2009, 22h29
  3. JButton avec boucle while contenant thread.sleep(1000)
    Par v4np13 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/10/2007, 20h31
  4. Boucle while avec action sur table SQL
    Par kamikazbe dans le forum JDBC
    Réponses: 4
    Dernier message: 01/06/2007, 11h46
  5. Multi Thread et boucle infini...
    Par mickael777 dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 05/01/2006, 20h53

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