Dalam pemrograman multi-thread Java, tipe java.lang.Thread berisi serangkaian metode start(), stop(), stop(Throwable) dan suspend(), destroy() dan resume(). Melalui metode ini, kita dapat melakukan operasi yang mudah pada thread, namun di antara metode ini, hanya metode start() yang dipertahankan.
Alasan untuk mengabaikan metode ini dijelaskan secara rinci dalam artikel oleh Sun "Mengapa Thread.stop, Thread.suspend, dan Thread.resume Tidak Digunakan Lagi?"
Jika Anda benar-benar perlu mengakhiri thread, Anda dapat menggunakan metode berikut:
1. Biarkan metode run() thread selesai dijalankan dan thread berakhir secara alami. (Metode ini adalah yang terbaik)
2. Akhiri thread dengan melakukan polling dan berbagi bit flag, seperti while(flag){}, nilai awal flag disetel ke true, dan bila perlu dihentikan, setel nilai flag ke false. (Metode ini juga tidak terlalu bagus, karena jika metode while(flag){} memblokir, flag tersebut akan menjadi tidak valid)
boolean stop volatil pribadi = false;
pembatalan kekosongan publik() {
berhenti = benar;
}
menjalankan kekosongan publik() {
sementara(berhenti) {
// ... beberapa pernyataan
}
}
}
Jika thread memasuki status Not Runnable karena mengeksekusi sleep() atau wait(), jika wait(), maka bit flag tidak akan berfungsi jika digunakan.
penantian kekosongan akhir publik (batas waktu lama)
throws InterruptedException Metode ini menyebabkan thread saat ini (sebut saja T) menempatkan dirinya di set tunggu objek dan kemudian mengabaikan semua persyaratan sinkronisasi pada objek ini. Artinya, thread saat ini menjadi status menunggu
Penggunaan standar wait()
disinkronkan(obj){
while(<kondisi tidak terpenuhi>){
obj.tunggu();
}
Proses pemrosesan yang memenuhi kondisi
}
Dan Anda ingin menghentikannya, Anda dapat menggunakan yang ketiga yaitu.
3. Gunakan interupsi(), dan program akan memunculkan pengecualian InterruptedException, sehingga menyebabkan thread eksekusi meninggalkan metode run().
Misalnya:
kelas publik SomeThread {
public static void main(String[] args)
{
Utas utas=Utas baru(Dapat Dijalankan baru(){
menjalankan kekosongan publik() {
while (!Thread.interrupted()) {
// Memproses pekerjaan yang akan diproses
mencoba {
System.out.println("tidur");
Thread.tidur(1000);
} tangkapan (InterruptedException e) {
e.printStackTrace();
System.out.println("Saya terganggu!");
}
});
thread.mulai();
thread.interrupt();
}
}
pergi tidur
aku terganggu!