Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menghentikan Benang Java dengan Selamat Tanpa Menggunakan `Thread.stop()`?

Bagaimana untuk Menghentikan Benang Java dengan Selamat Tanpa Menggunakan `Thread.stop()`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-22 09:27:11770semak imbas

How to Safely Stop a Java Thread Without Using `Thread.stop()`?

Cara Membunuh Benang dengan Berkesan tanpa Menggunakan Kaedah Benang yang Dihentikan.stop()

Kelas Benang Java menyediakan kaedah stop() sebagai cara untuk menamatkan benang, tetapi ia telah ditamatkan dan tidak boleh digunakan. Artikel ini membentangkan pendekatan alternatif untuk menamatkan rangkaian menggunakan kaedah gangguan.

Menggunakan Interrupt untuk Menghentikan Benang

Daripada memanggil terus stop(), yang tidak selamat dan boleh menyebabkan kerosakan data, kami boleh menggunakan gangguan untuk memberi isyarat kepada utas bahawa ia harus ditamatkan dengan anggun. Begini caranya:

public class InterruptedExceptionExample {

    private static volatile boolean shutdown = false;

    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (!shutdown) {
                try {
                    System.out.println("Running...");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        thread.start();
        System.out.println("Press enter to quit");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        shutdown = true;
        thread.interrupt();
    }
}

Dalam kod ini:

  1. Kami mencipta benang yang berjalan selama-lamanya dalam gelung, mencetak "Berjalan..." setiap 5 saat.
  2. Kami mempunyai bendera boolean statik (penutupan) yang dimulakan kepada palsu, yang akan digunakan untuk memberi isyarat kepada urutan berhenti.
  3. Kaedah run() benang menyemak bendera penutupan dengan kerap. Jika ia ditetapkan kepada benar, benang keluar dari gelung.
  4. Kaedah main() mencipta urutan, memulakannya dan kemudian menunggu input pengguna untuk menetapkan bendera penutupan kepada benar.
  5. Akhirnya, urutan ditamatkan dengan anggun menggunakan interrupt().

Kelebihan Menggunakan Gangguan:

Mengganggu urutan menawarkan beberapa kelebihan berbanding hentian yang tidak digunakan ():

  • Penamatan Anggun: Benang yang terganggu mempunyai peluang untuk membersihkan meningkatkan sebarang sumber atau melaksanakan apa-apa tugas yang perlu sebelum keluar.
  • Pengecualian Melontar: Gangguan menyebabkan kaedah tertentu, seperti sleep() dan tunggu(), membuang pengecualian InterruptedException. Urutan yang ditulis dengan baik boleh menangkap pengecualian ini untuk mengendalikan gangguan.
  • Selamat dan Teguh: Tidak seperti stop(), yang boleh menyebabkan kerosakan data, gangguan ialah cara yang lebih selamat dan boleh dipercayai untuk menamatkan benang.

Atas ialah kandungan terperinci Bagaimana untuk Menghentikan Benang Java dengan Selamat Tanpa Menggunakan `Thread.stop()`?. 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