Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengganggu Kaedah Penyekat ServerSocket.accept() dengan Anggun?

Bagaimana untuk Mengganggu Kaedah Penyekat ServerSocket.accept() dengan Anggun?

Susan Sarandon
Susan Sarandonasal
2024-10-27 18:58:30460semak imbas

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

Mengganggu Kaedah Penyekat ServerSocket Accept()

Dalam aplikasi berbilang benang, mungkin perlu untuk mengganggu kaedah menyekat seperti ServerSocket.accept(). Ini biasanya diperlukan untuk penutupan yang anggun atau untuk membalas arahan pentadbiran.

Kaedah accept() tradisional menyekat sehingga sambungan pelanggan diterima. Tingkah laku ini boleh menghalang keupayaan untuk bertindak balas kepada peristiwa luaran atau menamatkan aplikasi dengan segera.

Penyelesaian: Menggunakan Close() untuk Mengganggu

Satu penyelesaian berkesan untuk mengganggu penyekatan kaedah accept() adalah untuk memanggil close() pada objek ServerSocket daripada benang yang berasingan. Apabila close() dipanggil, kaedah accept() akan membuang SocketException.

<code class="java">// In the admin thread
ServerSocket serverSocket = ...;
serverSocket.close();</code>

Mengendalikan Gangguan

Dalam gelung utama tempat accept() berada dipanggil, adalah perlu untuk menangkap SocketException dan mengendalikannya dengan anggun.

<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>

Faedah Pendekatan Ini

  • Membenarkan penutupan aplikasi secara anggun , walaupun semasa accept() menyekat.
  • Menyediakan cara yang boleh dipercayai untuk mengganggu kaedah penyekatan tanpa perlu mengubah suai kelas ServerSocket itu sendiri.

Atas ialah kandungan terperinci Bagaimana untuk Mengganggu Kaedah Penyekat ServerSocket.accept() dengan Anggun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn