À l'aide de join() vs wait() thread java
J'ai besoin de faire de la séquence de threads. Ils ont besoin pour commencer dans l'ordre comme ceci:
A then B then C and finally D.
Lorsque D est fini alors C peut terminer puis B puis A.
Dans cette situation, ce qui est le mieux à utiliser join()
fils ou wait()
? et pourquoi?
Mon fils besoin pour démarrer et imprimer le message Hello I'm thread a/b/c/d
et quand ils ont fini, ils ont besoin d'imprimer I'm finished a/b/c/d
.
- Les deux choses ne sont pas vraiment liés.
- Je suppose que vous essayez de suspendre l'exécution d'un thread.. s'il vous Plaît aller à travers Oracle java tutoriel sur les Threads docs.oracle.com/javase/tutorial/essential/concurrency/...
- pouvez-vous explane moi qui? Que dois-je utiliser dans ce cas peut-être quelque chose d'autre?
- Si vous avez des quatre fils qui ne sont pas "autorisés" à faire les choses jusqu'à ce qu'une certaine condition dans les autres threads, alors vous ne devriez probablement pas être le multithreading.
- je suppose que cela va juste pour dormir pendant un certain temps, mais je veux attendre jusqu'à ce que D est terminé, puis ensuite reste d'entre eux peuvent cesser de fumer.
- Êtes-vous sûr que votre exemple est correct? Votre sortie semble être erronée.
- ma tâche me dit de faire ce programme. :/ Je suis en train d'apprendre les threads et d'essayer de comprendre cela.
- Je voudrais utiliser
join()
parce que quand vouswait()
, vous envoyez un message avec "Im done", et puis arrêtez le fil.join()
fait pour vous.
Vous devez vous connecter pour publier un commentaire.
Depuis que vous êtes en attente pour l '"autre" thread terminer (c'est à dire terminer l'exécution),
join()
serait le meilleur choix.La javadoc de
join()
dit simplement: Attend à ce que le thread de mourir.Le mécanisme est alors relativement simple:
À expliquer: vous devez disposer d'une référence à la
otherThread
. Donca
se réfère àb
,b
se réfère àc
,c
se réfère àd
etd
ne fait pas référence à touteotherThread
(c'est nul).La déclaration
otherThread.join()
attend l'autre thread complet. Il est enveloppé dans une boucle depuisjoin()
pouvez jeterInterruptedException
(bien que rarement dans la pratique).Espère que cette aide, bonne chance.
Javadoc
pour les blocs protégés -Note: Always invoke wait inside a loop that tests for the condition being waited for. Don't assume that the interrupt was for the particular condition you were waiting for, or that the condition is still true.
, je pense que sa mise en oeuvre est à droite.En gardant à l'esprit que
join
etwait
faire des choses très différentes et ne sont pas vraiment liés, et ayant également à l'esprit que l'exemple que vous avez donné est vraiment, vraiment étrange, quel que soit le choix pourrait être celui que vous cherchez.join
est probablement le choix le plus facile. Le thread appelantjoin
va attendre jusqu'à ce que l'autre thread a fini de l'exécution. Ainsi, chaque thread dans ce cas devra contenir une référence à la prochaine fil, et il va appelerjoin
droite avant l'impression "je suis fini". Si votre classe pourrait ressembler à ceci:Et la méthode principale pourrait être:
Ce
wait
n'est la suspension de l'exécution d'un thread jusqu'à ce quenotify
ounotifyAll
est appelé. Afin de mettre en œuvre cette idée avecwait
, vous avez besoin chaque thread pour contenir une référence au fil avant il. La stratégie est pour lerun
méthode pour terminer par un appel àwait
, suivi par un appel ànotify
le thread précédent que l'exécution est terminée. Si votre classe pourrait ressembler à quelque chose comme ceci:Et la
main
méthode qui met tout en place à partir de la thread principale pourrait être:La
join()
méthode est utilisée pour attendre qu'un thread pour achever l'exécution. Lejoin()
méthode d'une instance de Thread peut être utilisé pour "rejoindre" le début d'un thread d'exécution à la fin d'un autre thread d'exécution afin qu'un thread ne va pas commencer à courir jusqu'à ce qu'un autre thread est terminé. Sijoin()
est appelée sur une instance de Thread, le thread en cours d'exécution bloquera jusqu'à ce que le Thread instance a fini de s'exécuter.Un exemple de
join()
La
wait()
méthode est utilisée pour attendre une notification sera envoyée sur un objet. Les deux conditions sont assez distinctif.Un exemple et une explication plus détaillée de
wait()
Je voudrais faire de cette façon
sortie