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

avec Java Discussion :

[Thread] probleme de compréhension


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut [Thread] probleme de compréhension
    Bonjour a tous,

    Une nouvelle fois, je poste sur ce forum pour trouver la réponse a une question pourtant toute bette !!!

    Je sais ce qu'est un thread... La classe Thread possède une méthode join(millis) qui permet d'attendre au plus millis millisecondes avant de passer la main a un autre thread (d'après ce que j'ai compris)

    Seulement, je fait un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int i; i<x; i++)
        Thread thread = new mythread(...);
        thread.start();
    Et dans ces cas la, ça ne fonctionne pas !!

    Par contre, si je fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int i; i<x; i++)
        Thread thread = new mythread(...);
        thread.join(30000);
        thread.start();
    Cela fonctionne... Mais, d'après ce que j'ai compris, le join passe la main à un thread pendant 30 000 millisecond maximum... Donc, ma question est la suivante :
    - Cela ne revient-il pas a faire des appels en serie et non en parallele ?? (vu qu'à parement, il passe de thread en thread les uns après les autres)

    Sachant que mes thread ne fond qu'appeler une autre fonction, cela riendrait au meme de faire ces appels de fonction les uns après les autres non ?

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    Salut,

    Un thread est géré dans l'ordonnanceur de l'OS alors que si tu appelais les fonction en serie dans un thread unique, si tu a une méthode bloquante a uhn endroit le reste du programme est arreter.
    Par contre si tu thread la méthode bloquante, c'est l'OS qui va donner la main a cette méthode ou au reste de ton programme qui peu continuer a faire d'autre traitement.

    De toute maniere la threading ne permet pas de faire plusisuers chose en parallèle. C'est du simili parallèle avec de la gestion d'ordonnancement de tache au nivo de l'OS

    grosso modo pour faire deux chose en meme temps il te faudrais 2 CPU.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Oui oui, ça, j'ai bien compris !!

    Enf ait, mes thread doivent tous se connecté a une base de données (une base par thread), donc, je voudrais que l'exécution de ces thread se fasse en "parallele" (meme si je suis au courrant que ça n'est qu'une simulation)...

    Mais ma question, c'est, dans mon cas ou les thread pourrait avoir des temps d'attente de connection a la base (par exemple), est-ce que faire des thread.join(30 000) ne revient finalement pas a faire un appel des fonctions les unes après les autres dans le thread principal ??

    En fait, la question porte plus sur le fonctionnement de la méthode join()

  4. #4
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    Je suis pas sur de tout bien saisir àc e que tu veux faire mais en fait la méthode join permet de bloquer la méthode appelante jusqu'a ce que le thread se termine.

    Le truc c'est dappeler tous tes thread a la suite et de faire tous les join a la suite aussi sino en effet cela reviendrai a appeler tes thread en serie dans un seul programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Thread T1 = new MyThread.run();
    Thread T2 = new MyThread.run();
    T1.join();
    T2.join();

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 137
    Par défaut
    Oui, c'est ce que j'ai compris aussi, et donc, je ne vois pas l'interêt d'utiliser des threads avec un join() qui revient finalement a un traitement des threads les uns après les autre et non en meme temps !

    Enfait, il va créer les deux Threads, il va s'arrté après le premier join en attendant que T1 finisse et quand T1 sera finit, il passera au T2 !!

    Ce qui fait bien une execution en série... non ??

  6. #6
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    ce serai comme sa si tu faisait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Thread T1 = new MyThread.run();
    T1.join();
    Thread T2 = new MyThread.run();
    T2.join();
    Mais si tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Thread T1 = new MyThread.run();
    Thread T2 = new MyThread.run();
    T1.join();
    T2.join();
    Les deux thread tournent bien en // par contre le programme appellant est bloqué tant que les deux thread on pas fini leur execution

    Essaye d'améliorer ton niveau, par exemple avec ces cours et tutoriels pour apprendre Java : http://java.developpez.com/cours/

    ++

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

Discussions similaires

  1. Réseau....probleme de compréhension
    Par Mut dans le forum Administration
    Réponses: 7
    Dernier message: 10/06/2005, 16h42
  2. [Thread] Probleme avec mon Timer
    Par Nico66 dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 02/06/2005, 17h10
  3. [Débutant][Threads] Problème de synchronisation
    Par sephile dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 02/01/2005, 23h29
  4. [THREAD] probleme de pipe
    Par mehdiyassin dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 01/07/2004, 13h50
  5. Thread Probleme pour l'arret
    Par Raideman dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/04/2004, 12h17

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