80 votes

Comment mettre fin instantanément à un blocage de threads sur une opération IO de socket?

Dans le contexte de Java, je crée un nouveau thread pour lire les entrées réseau lors de l'ouverture d'une fenêtre graphique et lorsque je ferme la fenêtre, je souhaite libérer la ressource socket et terminer le thread immédiatement. Maintenant, j'utilise la méthode setSoTimeout, mais je ne veux pas attendre l'exception de timeout. Quelqu'un pourrait-il donner une suggestion? Merci!

65voto

Stephen C Points 255558

Il y a deux façons de le faire:

  • Appelant Thread.interrupt() va (dans certaines circonstances qui ne sont pas spécifiés) interrompre un blocage de l'opération d'e/S, à l'origine de jeter un InterruptedIOException ou ClosedByInterruptException.

  • Appelant Socket.close() sur la prise de courant à proximité de l'associé InputStream et OutputStream objets, et la cause de tous les threads bloqués dans le support ou (associé) flux d'opérations pour être débloqué. Selon la javadoc, les opérations sur le support lui-même va jeter un SocketException.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X