Question
Une question si je peux me permettre.
laisse supposer que mon thread principal crée 3 fils. Ces 3 threads appellent attente () sur un certain objet. Ensuite, le principal fil appelle notifyAll () pour le même objet.
Comment puis-je assurer que thread2, et seulement thread2, produit tout thread1 et thread3 simplement ignorer la notification et revenir à l'état d'attente?
En substance, comment puis-je diriger mon avis à un fil choisi?
Si je ne me trompe pas, ce serait tout à fait simple en Java 5. On pourrait créer des conditions différentes et ont le thread principal ne se réunissent que la condition sur laquelle thread2 attend.
Cependant, comment pourrais-je résoudre dans pre5?
Cordialement, Vic
La solution
Il faut noter que les discussions peuvent spontanée suite même sans notify
. Donc, vous avez toujours une sorte de condition. La forme générale du code est:
synchronized (lockObj) {
while (!condition) {
lockObj.wait();
}
}
Il peut y avoir des raisons de performance pour réveiller seulement des fils qui font des opérations spécifiques. Pour cela regarder dans java.util.concurrent.locks
, mais notez qu'il est un problème de performance pas faire-la-droite-chose question.