Jika an InterruptedException
dilempar itu berarti ada sesuatu yang ingin mengganggu (biasanya menghentikan) utas itu. Ini dipicu oleh panggilan ke interrupt()
metode utas . Metode menunggu mendeteksi itu dan melemparInterruptedException
sehingga kode tangkapan dapat menangani permintaan penghentian segera dan tidak harus menunggu sampai waktu yang ditentukan habis.
Jika Anda menggunakannya di aplikasi single-threaded (dan juga di beberapa aplikasi multi-thread), pengecualian itu tidak akan pernah terpicu. Mengabaikannya dengan klausa tangkap kosong, saya tidak akan merekomendasikan. Pelemparan akan InterruptedException
menghapus status terputus dari utas, jadi jika tidak ditangani dengan benar info tersebut akan hilang. Oleh karena itu saya akan mengusulkan untuk mencalonkan diri:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
Yang menetapkan keadaan itu lagi. Setelah itu, selesaikan eksekusi. Ini akan menjadi perilaku yang benar, bahkan tangguh tidak pernah digunakan.
Yang mungkin lebih baik adalah menambahkan ini:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... pernyataan ke blok tangkap. Itu pada dasarnya berarti bahwa itu tidak boleh terjadi. Jadi jika kode tersebut digunakan kembali di lingkungan di mana hal itu mungkin terjadi, ia akan mengeluh tentangnya.