Rumah  >  Artikel  >  Java  >  Bagaimana untuk berhenti menamatkan benang di Jawa?

Bagaimana untuk berhenti menamatkan benang di Jawa?

PHPz
PHPzasal
2024-04-11 14:33:02787semak imbas

Terdapat empat kaedah untuk menghentikan dan menamatkan utas dalam Java: kaedah interrupt(): mengganggu utas dan membuang pengecualian InterruptedException. kaedah stop(): Tidak disyorkan kerana ia menghentikan utas serta-merta, mungkin mengakibatkan kehilangan data. Tetapkan bendera sampukan: Tetapkan bendera untuk benang untuk ditinjau untuk menentukan sama ada ia perlu ditamatkan. Menggunakan join(): Menyekat utas semasa sehingga utas memanggil join() daripada utas lain ditamatkan.

Bagaimana untuk berhenti menamatkan benang di Jawa?

Cara Menghentikan Menamatkan Benang di Java

Di Java, benang boleh ditamatkan dalam pelbagai cara. Memahami cara menamatkan benang dengan betul adalah penting untuk memastikan kestabilan dan prestasi aplikasi. Artikel ini akan membincangkan kaedah biasa untuk menghentikan dan menamatkan benang, dengan kes praktikal dilampirkan.

Kaedah 1: kaedah interrupt()

Kaedahinterrupt() boleh digunakan untuk mengganggu pelaksanaan thread. Jika urutan sedang tidur atau menunggu I/O, anda akan menerima pengecualian InterruptedException. Dalam kes praktikal berikut, kami menggunakan kaedah interrupt() untuk menghentikan benang tidur: interrupt() 方法可用于中断线程的执行。如果线程正在休眠或等待I/O,则会收到一个 InterruptedException 异常。在以下实战案例中,我们使用 interrupt() 方法来停止一个正在休眠的线程:

public class InterruptThreadExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {
                System.out.println("已中断!");
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        thread.interrupt();
        thread.join(); // 等待线程终止
    }
}

输出:

已中断!

方法 2:stop() 方法

不推荐使用 stop() 方法,因为它会立即停止线程,可能导致数据丢失或应用程序不稳定。强烈建议使用 interrupt() 方法代替。

方法 3:设置中断标志

您可以设置一个中断标志,供线程轮询。当该标志设为 true 时,线程知道它应该终止:

public class InterruptFlagExample {

    private volatile boolean interrupted = false;

    public static void main(String[] args) throws InterruptedException {
        InterruptFlagExample example = new InterruptFlagExample();

        Thread thread = new Thread(() -> {
            while (!example.isInterrupted()) {
                // 做一些事情
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        example.setInterrupted(true);
        thread.join(); // 等待线程终止
    }

    public void setInterrupted(boolean interrupted) {
        this.interrupted = interrupted;
    }

    public boolean isInterrupted() {
        return interrupted;
    }
}

方法 4:使用 Join

join() 方法可以用来停止和等待线程终止。它将阻塞当前线程,直到另一个线程调用了 join()

public class JoinExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {}
        });

        thread.start();
        thread.join(); // 等待线程终止
    }
}

Output:

rrreee

Kaedah 2: kaedah stop() 🎜🎜Tidak disyorkan stop( ) kaedahkerana ia menghentikan rangkaian serta-merta, yang berpotensi menyebabkan kehilangan data atau ketidakstabilan aplikasi. Sebaliknya, anda amat disyorkan untuk menggunakan kaedah interrupt(). 🎜🎜Kaedah 3: Tetapkan Bendera Sampukan🎜🎜Anda boleh menetapkan bendera sampukan untuk urutan undian. Apabila bendera ini ditetapkan kepada benar, urutan tahu bahawa ia harus ditamatkan: 🎜rrreee🎜Kaedah 4: Menggunakan Sertai🎜🎜Kaedah join() boleh digunakan untuk berhenti dan menunggu urutan ditamatkan . Ia akan menyekat urutan semasa sehingga urutan lain yang memanggil join() ditamatkan. 🎜rrreee🎜Ini menyekat benang semasa selama 10 saat sehingga benang lain ditamatkan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk berhenti menamatkan benang di Jawa?. 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