Maison > Java > javaDidacticiel > le corps du texte

Comment interrompre gracieusement une méthode bloquante ServerSocket.accept() ?

Susan Sarandon
Libérer: 2024-10-27 18:58:30
original
460 Les gens l'ont consulté

How to Gracefully Interrupt a Blocking ServerSocket.accept() Method?

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>
Copier après la connexion

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>
Copier après la connexion

Avantages de cette approche

  • Permet un arrêt progressif de l'application , même pendant que accept() bloque.
  • Fournit un moyen fiable d'interrompre la méthode de blocage sans avoir à modifier la classe ServerSocket elle-même.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!