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

Java Discussion :

multi thread java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Par défaut multi thread java
    Bonsoir je un petit problème
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    class NewThread implements Runnable
    {
    	String name; // name of thread
    	Thread t;
    	NewThread(String threadname)
    	{
    		name=threadname;
    		t=new Thread(this, name);
    		System.out.println("New thread:"+t);
    		t.start(); //start the thread
    	}
    	//this is the entry point of the thread
    	public void run()
    	{
    		try
    		{
    			for(int i=5;i>0;i--)
    			{
    				System.out.println(name+":"+i);
    				Thread.sleep(1000);
    			}
    		}
    		catch(InterruptedException e)
    		{
    			System.out.println(name + "Interrupted");
    		}
    		System.out.println(name + "exiting");
    	}
    }
    class MultiThreadDemo
    {
    	public static void main(String args[])
    	{
    		new NewThread("One"); //start thread
    		new NewThread("Two");
    		new NewThread("Three");
    		try
    		{
    			Thread.sleep(10000);
    		}
    		catch(InterruptedException e)
    		{
    			System.out.println("Main Thread Interrupted");
    		}
    		System.out.println("Main Thread Existing");
    	}
    }
    output de ce code est
    Output:
    New thread:Thread[One,5,main]
    New thread:Thread[Two,5,main]
    New thread:Thread[Three,5,main]
    One:5
    Two:5
    Three:5
    Two:4
    Three:4
    One:4
    Two:3
    Three:3
    One:3
    Three:2
    One:2
    Two:2
    Two:1
    Three:1
    One:1
    Twoexiting
    Threeexiting
    Oneexiting
    Main Thread Existing
    ma question lorsque on crée un nouveau thread on doit appeler sa méthode start qui par défaut appelle la méthode run par contre dans cet exemple selon output on fait le start de thread puis on revient au programme principale w enfin on fait le run de thread c'est ce point que j'ai pas compris.

  2. #2
    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
    Hello,

    ben non il se contente pas juste d'appeler la méthode run(), ça servirait à quoi ?

    Il démarre un nouveau thread (pas l'objet Thread, le mécanisme thread, c'est à dire le machin qui s'exécute en parallèle de ce qui s'exécutait déjà), et ce nouveau thread ainsi démarré, va appeler la méthode run().

    De ce fait, il est impossible de prévoir ce qui arrivera le premier : continuer la méthode main() ou commencer la méthode run().
    Mais en pratique, démarrer un thread c'est bien plus long que continuer le thread en cours. Il y a donc d'énormes chances que d'abord, la méthode main() continue, et ensuite, les méthodes run() commencent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Par défaut
    ok c'est clair donc on général le thread avec la méthode start est prêt à commencer mais il ne commence pas directement donc sa méthode run n'est pas exécuté directement après start mais il revient au thread principal qui existe dans la fonction main et qui est démarré par défaut puis il revient pour exécuter le run du thread child (en fait ma question concerne exactement ce point).

  4. #4
    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
    Je crois que tu as du mal avec la notion de parallélisme.

    Il n'y a pas de "d'abord, et puis ensuite". Tous les threads s'exécutent en même temps. En parallèle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Par défaut
    à un instant précis il y a un seul thread en cours d’exécution et les autres thread sont à l'étape de waiting n'est c'est ce pas?

  6. #6
    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
    Ah non pas du tout. Déjà le principe du thread, c'est qu'à moins que la machine soit monoprocesseur et monocœur, il peut tout à fait s'en exécuter plusieurs à la fois.

    Ensuite, même s'il ne s'exécutent pas tous en même temps (pas assez de cœurs physiques, reste de l'OS consommateur en cœurs aussi,) ils sont de toute façon à l'état RUNNABLE. WAITING c'est pour les threads qui ne pourraient pas s'exécuter même s'il y avait de la puissance processeur de libre. C'est parce qu'ils attendent qu'un autre thread finisse quelque chose pour se synchroniser avec.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. sreveur multi thread en java
    Par doussaGL dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 05/05/2014, 19h17
  2. Batch Java pour une mailBox en multi threading
    Par younesms dans le forum Général Java
    Réponses: 2
    Dernier message: 07/03/2013, 13h47
  3. Groovy et Java Multi-Threading
    Par horoquartz dans le forum Groovy
    Réponses: 0
    Dernier message: 20/09/2012, 18h05
  4. Serveur multi-threadé en Java et les sessions
    Par K-LiBR3 dans le forum Java EE
    Réponses: 0
    Dernier message: 10/04/2012, 00h03
  5. Debuger du code Java multi-threadé
    Par LGnord dans le forum Tests et Performance
    Réponses: 8
    Dernier message: 15/01/2010, 15h39

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