Interruption d'une méthode bloquante ServerSocket Accept()
Dans une application multithread, il peut être nécessaire d'interrompre une méthode de blocage telle que ServerSocket.accepter(). Ceci est généralement requis pour un arrêt progressif ou pour répondre aux commandes administratives.
La méthode traditionnelle accept() se bloque jusqu'à ce qu'une connexion client soit reçue. Ce comportement peut entraver la capacité de répondre à des événements externes ou de terminer l'application rapidement.
Solution : utiliser Close() pour interrompre
Une solution efficace pour interrompre le blocage La méthode accept() consiste à appeler close() sur l’objet ServerSocket à partir d’un thread séparé. Lorsque close() est invoquée, la méthode accept() lèvera une SocketException.
<code class="java">// In the admin thread ServerSocket serverSocket = ...; serverSocket.close();</code>
Gestion de l'interruption
Dans la boucle principale où accept() se trouve étant appelé, il est nécessaire d'attraper la SocketException et de la gérer avec élégance.
<code class="java">while (listening) { try { // Accept client connection Socket clientSocket = serverSocket.accept(); // ... Process client connection } catch (SocketException e) { // Handle the interruption // ... Shut down client threads, admin thread, and main thread break; } }</code>
Avantages de cette approche
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!