Rumah >Java >javaTutorial >Bagaimana untuk Menghentikan Benang Java dengan Selamat dan Anggun?

Bagaimana untuk Menghentikan Benang Java dengan Selamat dan Anggun?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 22:28:09493semak imbas

How to Safely and Gracefully Stop a Java Thread?

Cara Menghentikan Benang Java dengan Selamat dan Anggun

Apabila bekerja dengan multithreading di Java, mungkin timbul bahawa anda perlu menamatkan benang lebih awal. Untuk menjamin pelaksanaan yang betul dan mengelakkan ketidakstabilan sistem, adalah penting untuk menghentikan rangkaian "dengan anggun." Ini melibatkan membenarkan urutan menyelesaikan sebarang operasi kritikal sebelum menamatkan pelaksanaannya.

Masalah:

Anda telah mencipta urutan yang mengambil masa yang terlalu lama untuk dilaksanakan . Walaupun kelihatan seperti belum selesai, anda ingin menghentikan urutan dengan anggun.

Penyelesaian:

Pendekatan pilihan untuk mencapai ini adalah dengan memanfaatkan pembolehubah boolean dalam urutan sasaran kaedah run(). Menetapkan bendera ini kepada benar dari luar akan memberi isyarat agar urutan ditamatkan dengan anggun. Berikut ialah contoh:

class MyThread extends Thread {

    volatile boolean finished = false;

    public void stopMe() {
        finished = true;
    }

    @Override
    public void run() {
        while (!finished) {
            // Perform tasks
        }
    }
}

Elakkan kaedah stop():

Pada masa lalu, kaedah Thread.stop() wujud, tetapi penggunaannya sangat kuat berkecil hati. Mengikut dokumentasi Java, kaedah ini "membuka kunci semua monitor yang telah dikunci" semasa pelaksanaan, membawa kepada potensi ketidakkonsistenan data dan tingkah laku sewenang-wenangnya.

Oleh itu, menggunakan bendera boolean seperti yang digambarkan di atas memastikan keselamatan dan mekanisme penamatan benang terkawal.

Atas ialah kandungan terperinci Bagaimana untuk Menghentikan Benang Java dengan Selamat dan 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