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 :

l'ordre d’exécution d'un thread


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de amazircool
    Inscrit en
    Décembre 2005
    Messages
    497
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 497
    Par défaut l'ordre d’exécution d'un thread
    salut
    L'appel de la méthode start() passe le thread à l'état "prêt", ce qui lui permet de démarrer dès que possible (mais pas nécessairement immédiatement). C'est la machine virtuelle JAVA qui décide du moment auquel le thread va s'exécuter. Lorsque le thread démarre, JAVA appelle sa méthode run().

    Je veux poser une question un peu bête
    Si la machine virtuelle JAVA qui décide du moment auquel le thread va s'exécuter, alors sur quels critères cette machine donne lord d’exécution ?

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Bonne question.
    Perso je soupçonne un odronnanceur et une file d'attente la dessous. De cette manière lorsque ce sserait le tour du thread, celui-ci partirait.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Java utilise la priorité des threads pour les ordonnancer. Mais java n'oblige pas une vm à scheduler les threads d'une maniere specifique. Les priorités sont plus une recommandation pour la vm qu'une obligation.

    A priori, les threads de plus forte priorité sont executés en premier.

    En général, l'ordonancement dépend de la gestion des threads de la platforme.
    Les threads java étant mappés sur les threads natifs.

    Il me semble que sous windows, les threads a priorité égale sont en mode round-robin, et sous linux en mode preemptif.

    L'idée, c'est qu'il ne faut pas s'appuyer sur l'ordonnance des threads pour fixer le sequencement de l'execution des threads. Il faut des points de synchronisation, soit en utilisant le mot clé synchronized, soit en utilisant les packages java.util.concurrent*

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Concernant les priorités, j'ai déjà remarqué que ces dernières ne sont pas gérées de la même façon selon l'OS. Ainsi sous windaube, si je me rappelle bien, les thread de même priorité se voient allouer le même temps chacun. Sur solaris, cela était plus ou moins aléatoire.
    Pour en revenir à notre problème, peut-être que la JVM attends une réponse de l'OS, et ce serait cette attente qui bloquerait l'exécution ?

  5. #5
    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
    Citation Envoyé par Sanguko Voir le message
    ...
    En général, l'ordonancement dépend de la gestion des threads de la platforme.
    Les threads java étant mappés sur les threads natifs...
    J'espere que ma remarque reste d'actualite: oui il y a bien des Jvm dont la gestion des threads est plus independantes de l'OS: greeen threads.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par ndp Voir le message
    J'espere que ma remarque reste d'actualite: oui il y a bien des Jvm dont la gestion des threads est plus independantes de l'OS: greeen threads.
    Oui et non.

    En fait les jvms recentes (à partir de la 1.2 je crois) utilisent par defaut les threads natifs.

    Il n'empeche qu'une implementation sur les green thread est necessaire si la plateforme n'a pas de threads natifs. Se pose alors le problème des appels bloquant (comme les entrees/sorties), qui bloquent en fait tous les green threads de la vm.

  7. #7
    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
    Citation Envoyé par Sanguko Voir le message
    Oui et non.

    En fait les jvms recentes (à partir de la 1.2 je crois) utilisent par defaut les threads natifs.

    Il n'empeche qu'une implementation sur les green thread est necessaire si la plateforme n'a pas de threads natifs.
    merci pour les precisions.
    Citation Envoyé par Sanguko Voir le message
    Se pose alors le problème des appels bloquant (comme les entrees/sorties), qui bloquent en fait tous les green threads de la vm.
    Tu es sur de ca? Ca me parait bizarre, qu'un thread java puisse bloquer tous les thread de la jvm.

Discussions similaires

  1. Exécution d'un thread
    Par Socrat dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/11/2007, 18h03
  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. Affichage d'un JOptionPane au cours de l'exécution d'un Thread
    Par azad_892000 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 20/03/2007, 22h23
  4. [Thread] Stopper l'exécution d'un thread brutalement
    Par Razgriz dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 31/01/2007, 19h55
  5. [java.util.Timer]Comment arrêter l'exécution d'un Thread
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 07/06/2006, 07h54

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