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

Collection et Stream Java Discussion :

Exécution d'un thread dans un Executor


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut Exécution d'un thread dans un Executor
    Bonjour

    Voici mon problème. Ma première version d'un logiciel utilisait des threads exécutés de la manière la plus classique:
    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
     
    @Override
        protected void getProjectCompoundsAndResults(Project project) 
                throws IOException, SQLException 
        {
            CompoundsGetter cg = new CompoundsGetter(project, 
                    this.forCompoundLot);
            Thread thread = new Thread(cg);
            thread.start();
            while (thread.isAlive()) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) {}
            }
        }
    Notez d'ailleurs la variable "projet" qui est un objet contenant une List.
    Puis, dans un souci d'être à la pointe, je me suis dis que c'était pas mal d'utiliser les Excecutor:
    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
     
    @Override
        protected void getProjectCompoundsAndResults(Project project) 
                throws IOException, SQLException 
        {
            CompoundsGetter cg = new CompoundsGetter(project, 
                    this.forCompoundLot);
            //Thread thread = new Thread(cg);
            ExecutorService pool = Executors.newSingleThreadExecutor();
            pool.submit(cg);
            pool.shutdown();
            /*thread.start();
            while (thread.isAlive()) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) {}
            }*/
        }
    Ca compile et ça s'exécute bien sauf qu'au debbugage, je peux voir qu'à l'initialisation, ma variable projet a bien sa List remplie mais dès que je suis en exécution (pool.submit(cg), la liste apparaît vide !
    Une précision, voici comment la méthode getProjectCompoundsAndResults est invoquée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    protected void writeProject(ResultSet rs) 
                throws SQLException, IOException 
        {
            Logger.getLogger(ProjectsGetter.class.getName()).log(Level.INFO, "Creating project {0}", rs.getString(2));
            Project project = new Project(rs.getInt(1), rs.getString(2), 
                    rs.getString(3));
            setProjectExperiments(project);
            getProjectCompoundsAndResults(project);
            project.getExperiments().clear();
        }
    Merci d'avance de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Bon, ben, finalement, j'ai trouvé, il me manquait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Override
        protected void getProjectCompoundsAndResults(Project project) 
                throws IOException, SQLException 
        {
            CCompoundsGetter cg = new CCompoundsGetter(project, this.forCompoundLot);
            ExecutorService pool = Executors.newSingleThreadExecutor();
            pool.submit(cg);
            pool.shutdown();
            while(!pool.isTerminated()){}
        }
    Par contre, si vous avez plus élégant, je prends.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pool.awaitTermination(10000, TimeUnit.DAYS);
    Ça attend tranquillement que l'executor se termine. Ça attend pendant 10000 jours, on ne peut pas lui dire d'attendre indéfiniment (parce qu'en réalité on ne veut jamais attendre indéfiniment.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Hello

    Merci pour le tip
    Ca fait plus propre sur le profiler ;-)

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Exécuter une commande linux dans X threads en parallèle
    Par sanchou dans le forum Général Java
    Réponses: 8
    Dernier message: 23/04/2008, 14h02
  2. Exécution d'un Thread dans une méthode statique
    Par barbiche dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 03/05/2007, 14h25
  3. création de plusieurs threads dans WinMain
    Par ChidoriRasengan dans le forum DirectX
    Réponses: 1
    Dernier message: 15/06/2005, 21h36
  4. Exécuter une requete enregistrée dans un champ
    Par pascalT dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 10h46
  5. Thread dans une classe ?
    Par Sephi dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 07/03/2004, 18h16

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