Kapan Thread.sleep Java menampilkan InterruptedException? Apakah aman untuk mengabaikannya? Saya tidak melakukan multithreading. Saya hanya ingin menunggu beberapa detik sebelum mencoba kembali beberapa operasi.
110
Kapan Thread.sleep Java menampilkan InterruptedException? Apakah aman untuk mengabaikannya? Saya tidak melakukan multithreading. Saya hanya ingin menunggu beberapa detik sebelum mencoba kembali beberapa operasi.
InterruptedException
adalah pengecualian tertangkap, sehingga Anda tidak dapat mengkompilasi kecuali jika Anda menangani atau menyatakan jenis ini pengecualian pada setiap metode yang bergabung atau tidur satuThread
, atau panggilanwait()
padaObject
.Jawaban:
Biasanya Anda TIDAK boleh mengabaikan pengecualian. Perhatikan kertas berikut ini:
Lihat seluruh makalah di sini:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
sumber
Jika an
InterruptedException
dilempar itu berarti ada sesuatu yang ingin mengganggu (biasanya menghentikan) utas itu. Ini dipicu oleh panggilan keinterrupt()
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: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:
... 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.
sumber
RuntimeException
.Newsletter Java Specialists (yang dapat saya rekomendasikan tanpa syarat) memiliki artikel menarik tentang ini , dan cara menangani file
InterruptedException
. Ini sangat berharga untuk dibaca dan dicerna.sumber
Metode seperti
sleep()
danwait()
kelasThread
mungkin melemparInterruptedException
. Ini akan terjadi jika ada orang lain yangthread
ingin menggangguthread
yang sedang menunggu atau tidur.sumber
Cara yang solid dan mudah untuk menanganinya dalam kode utas tunggal adalah dengan menangkapnya dan memasukkannya kembali dalam RuntimeException, untuk menghindari keharusan mendeklarasikannya untuk setiap metode.
sumber
The
InterruptedException
biasanya dilemparkan ketika tidur terganggu.sumber