Stop / Interruption des threads bloqués sur l'attente de l'entrée depuis le socket
Comme le dit le titre j'ai besoin d'un moyen pour arrêter ou interrompre un thread est bloqué en attente sur une entrée de la douille.
source d'informationauteur klaus johan
Vous devez vous connecter pour publier un commentaire.
Fil de discussion.interrupt() devrait être la méthode que vous cherchez.
Assurez-vous que votre entrée accédant à des méthodes aussi vérifier InterruptedException et ClosedByInterruptException.
Regardez également le correspondant page dans le Soleil de la Simultanéité Tutorielcomme le suggère une autre solution.
Vous pouvez simplement fermer (), le groupe ar/prise à partir d'un autre thread. Ensuite, vous pouvez vérifier sur un volatile champ booléen si le IOException est en raison de la proximité ou quelque chose d'autre. Je pense que la proximité peut entraîner une
java.net.SocketException: Socket closed
exception.Sockets permettent de définir un délai d'attente via le
setSoTimeout()
méthode. C'est la meilleure façon d'arrêter de blocage.Sinon, vous pourriez avoir un coup d'oeil à la
nio
qui permet aux non-blocage I/O au détriment de plus de travail manuel pour gérer les données entrantes et sortantes.Je n'ai pas vu
socket.closeInput()
. Cependant, je n'ai trouversocket.shutdownInput()
. Après l'appel qu' (à partir d'un autre thread qui a été le blocage sur le lire naturellement), mon appel àbufferedReader.close()
a bien fonctionné! (J'ai suivi cela avec des appels àprintWriter.close()
etsocket.close()
.Essayez d'utiliser une chaussette.closeInput (), suivie par la chaussette.close()
Fermer le socket et la lecture sera débloqué (quitter avec une sous-classe de IOException). Lire la réaction de Fil.interruption est dépendants de la plateforme (ne fonctionne pas sur Solaris 10 par exemple).