Je ne serai pas sûr que certains morceaux de mon code dans le fil principal seront exécutés après un morceau de code exécuté avec le fil secondaire. Voici ce que j'ai eu:
4 Réponses :
choses comme notifier () em> et wait () em> sont des primitives de synchronisation de bas niveau. Vous devez utiliser des abstractions de niveau supérieur chaque fois que possible, comme dans cette Cas, disons, un compte à rebours em>. p> Ce qui suit n'est qu'un exemple qui devrait vous aider à démarrer (par exemple, les problèmes de délai d'attente ne sont pas pris en compte ici): P > des choses de bas niveau comme wait em> et avertiez em> sont vraiment des idiosynchrases Java de bas niveau que vous ne devriez pas être préoccupée par (Sauf si vous écrivez des API de concurrence). P> En outre, je suggérerais de lire le livre incroyable: Java Concurrence dans la pratique EM>. P> P>
En supposant que votre fil principal doit initier le traitement du fil secondaire, un échangeur serait la solution la plus simple.
Si le fil secondaire est indépendant, alors une forme de BlockingQueue serait approprié. P>
Exemple utilisant l'échangeur (avec une manipulation d'exception appropriée). L'échangeur peut être remplacé par deux files d'attente. P>
@Jeffrey - merci. J'ai pris les liens que Google m'a donné, sans vérifier la version JDK.
@John - Il y a des raisons pour desquelles il y a beaucoup de code multi-fileté brisé. IMO Le plus grand est que les gens ne pensent pas à communiquer entre les threads.
@parisfal Quelqu'un a probablement vu un échangeur et n'avait aucune idée de ce que cela signifiait aussi A -1?
@parsifal: merci pour échangeur code>, qui résout le prochain problème que je voulais poster.
final Thread t = new Thread(new Runnable() { public void run() { System.out.println("qwerty"); } }); t.start(); t.join(); System.out.println("absolutely sure, qwerty is above");
Il suffit de voir que pendant que cela résout l'exemple primitif ci-dessus, il ne fait pas quelle est la question spécifiée si le sous-organisme devrait faire autre chose ...
La meilleure solution pour le code que vous avez donné est la suivante:
System.out.println("qwerty"); System.out.println("absolutely sure, qwerty is above");