A voir également:
- [JAVA] thread etat
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
1 réponse
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
2 janv. 2012 à 22:50
2 janv. 2012 à 22:50
RUNNABLE c'est quand le thread est en train de s'exécuter, donc à chaque fois que tu as this.getState() tu obtiendras RUNNABLE puisque le fait que tu appelles la méthodes signifie que le thread est en action. En revanche quand tu fais thread.getState tu ne devrais avoir RUNNABLE uniquement si thread==this parce que sinon cela signifierai que les deux threads différents s'exécutent en même temps ce qui n'est pas possible.
Modifié par Jip le 2/01/2012 à 23:35
mais lors de l'exécution j'obtiens bien
est ce possible que le second thread s'exécute simultanément sur un autre coeur de mon processeur ou la JVM fait abstraction de ça ?
Modifié par Jip le 3/01/2012 à 06:19
http://www.ukonline.be/programmation/java/tutoriel/concurrence/chapitre1/page3.php
qui nous explique qu'un thread a un état RUNNABLE et un RUNNING qui sont tous deux traduit par RUNNABLE lors de l'appel de getState().
Donc si c'est bien le cas ce n'est plus le fait que j'ai deux trois
"run dans B -> A = RUNNABLE"
qui s'affiche qui me dérange, mais pourquoi j'ai autant de
"run dans B -> A = BLOCKED"
étant donnée que mon thread A n'attend aucune ressource du thread B, je ne vois pas pourquoi il se met "BLOCKED"
3 janv. 2012 à 08:17
3 janv. 2012 à 08:39
Dans ce que tu me dis je comprends que dès qu'un thread a la main, tous les autres sont BLOCKED or dans mon exemple je constate que "parfois" mon thread en attente est toujours RUNNABLE(meme si la proportion de RUNNABLE est très faible)
J'ai d'ailleurs continué à chercher un peu et dans "penser en java" je trouve ceci
et dans dans ma class Test il me semble que la seule chose que mon thread A attend c'est que l'ordonnanceur lui rende la main, donc si je me fie à cet extrait il devrait toujours être RUNNABLE puisqu'il ne partage aucune ressource, n'attend pas d'I/O etc...
3 janv. 2012 à 09:18
Je me réfère à la documentation de Thread.State :
RUNNABLE Thread state for a runnable thread. A thread in the runnable state is executing in the Java virtual machine but it may be waiting for other resources from the operating system such as processor.
Effectivement, tous tes threads devraient être RUNNABLE, même s'ils ne sont pas tous en cours d'exécutions par la JVM, mais :
BLOCKED Thread state for a thread blocked waiting for a monitor lock. A thread in the blocked state is waiting for a monitor lock to enter a synchronized block/method or reenter a synchronized block/method after calling Object.wait.
La méthode System.out.println est synchronisée !
En conséquence, si B est en train de faire son affichage, A est bloquée et ne peut pas le faire en même temps (sinon on aurait des lignes qui se mélangeraient) et inversement B peut-être bloquée si A est en train de faire son affichage au même moment.