Je passe par un livre Java 6. Un extrait de code exemple est donné ci-dessous du chapitre Threads, où je besoin d'une clarificationAprès l'attente ne doit pas être thread dans l'état de blocage plutôt que l'état exécutable?
synchronized(a){ //The thread gets the lock on 'a'
a.wait(2000);// Thread releases the lock and waits for notify only for maximum of two seconds, then goes back to runnable state
//The thread reacquires the lock
//More instructions here
}
Maintenant, mon doute est, au bout de 2 secondes de temps d'attente, de poursuivre l'exécution ultérieure de code, le code ci-dessus nécessiterait le verrou sur l'objet 'a' et il y a de bonnes chances que l'autre thread (qui est supposé appeler notify() sur a) puisse déjà contenir un verrou dessus.
Le thread ne devrait donc pas passer à l'état de blocage après 2 secondes d'attente, au lieu de l'état Runnable comme mentionné ci-dessus dans les commentaires (dans la ligne n ° 2).
Dans la déclaration ci-dessus, où il est activé pour la planification des threads "dans la première ligne, cela signifie que c'est l'état Runnable maintenant. Droite? Mais la ligne suivante indique que maintenant elle se termine avec d'autres threads pour le droit de synchroniser (c'est-à-dire pour atteindre le verrou) - Alors cela signifierait le fil - Blocage de l'objet Alors, lequel est correct? Est-ce dans l'état Runnable ou dans l'état Blocking? S'il vous plaît corrigez-moi si je me trompe n'importe où. – Harish
Si aucun autre thread n'avait le verrou, il serait exécutable, mais si quelque chose d'autre avait le verrou, il devrait attendre comme tout le monde. Vous devriez écrire quelques tests pour explorer ce comportement plus loin. –
Merci pour cette info. Je vais essayer quelques exemples comme suggéré – Harish