Dans une application serveur multithread, le thread principal a généralement une boucle qui appelle accept() sur un ServerSocket pour gérer les connexions client entrantes. Cependant, si une commande d'arrêt est reçue, telle que « exit », il devient difficile d'interrompre la méthode bloquante accept() et de quitter le programme correctement.
Pour résoudre ce problème, envisagez l'approche suivante :
Utilisez la méthode close() d'un autre fil de discussion :
Exemple de code :
Thème principal :
<code class="java">while (listening) { try { Socket clientSocket = serverSocket.accept(); // Start client thread and add it to collection } catch (SocketException e) { // Shutdown has been initiated, break out of loop listening = false; } }</code>
Thème d'administration :
<code class="java">// Create and connect to listening server socket Socket adminSocket = new Socket("localhost", port); // Wait for 'exit' command ... // Close the admin socket to interrupt the main thread adminSocket.close();</code>
En suivant cette approche, l'acceptation () peut être interrompue par une SocketException levée lorsque le ServerSocket est fermé à partir d'un autre thread, permettant au programme de se terminer normalement en réponse aux commandes d'arrêt.
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!