Satu: Mengapa Anda ingin berbicara tentang penangkapan abnormal multi -utara saja?
Pertama -tama lihat sebuah contoh:
Public ThreadException mengimplementasikan runnable {@Override public void run () {Throw new runimeException ();}: Konsol mencetak informasi abnormal untuk periode waktu. Pernyataan Eksekusi Thread ditempatkan di blok TRY-Catch, tidak ada bantuan.Kelainan runtime dilemparkan secara manual dalam menjalankannya. Hasil berjalan seperti yang ditunjukkan di bawah ini:
Ditemukan bahwa kelainan itu dilemparkan ke dalam konsol, dan pernyataan di blok tangkapan tidak dicetak.
KESIMPULAN: Operasi multi -utuh tidak dapat menangani kelainan dalam proses pelaksanaan kelainan dalam rangka. Pelarian abnormal, tugas itu keluar dari tugas.
Jadi, kita harus berpikir tentang cara menangkap kelainan dalam multi -threads?
2. Tangkap kelainan pada multi -utara
Mari ikuti langkah -langkah di bawah ini untuk menyelesaikan percobaan:
1. Tentukan prosesor pengecualian
Diperlukan untuk mengimplementasikan metode UncaughtException dari thread.UnCAULTEXCEPTION HANDLER, sebagai berikut: sebagai berikut:
/ * * Langkah 1: Tentukan "prosesor abnormal" yang sesuai dengan spesifikasi prosesor abnormal utas * nyata. dipanggil saat hampir mati*/ @Override public void UncaughtException (Thread t, Throwable e) {System.out.println ("Tangkap"+e);}}}2. Tentukan pabrik utas menggunakan prosesor abnormal ini
/** Langkah 2: Tentukan pabrik thread* Pabrik utas untuk melampirkan tugas ke utas, dan mengikat utas ke prosesor abnormal*/kelas HanlderThreadFactory mengimplementasikan threadfactory {@override publik threadread (run nable r) {sistem. println (ini membuat utas baru "); = "+T.getuncaughtExcegeptionler ()); return t;}}3. Tentukan tugas untuk membiarkannya melempar pengecualian
/ * Langkah 3: Tugas kami dapat melemparkan pengecualian. ;
4. Panggil percobaan
/** Langkah 4: Gunakan pabrik utas untuk membuat kumpulan utas, dan panggil metode pelaksanaannya*/kelas publik threadExceptionuncaughtExceptionHandler {public static void main (string [] args) {executorser vice exec = executors.newcachedthreadpool (baru hanldrtyReadFactory () );Hasil berjalan seperti yang ditunjukkan di bawah ini:
3. Kesimpulan
Untuk menangkap kelainan yang dihasilkan oleh utas multi -utas di Java, Anda perlu menyesuaikan prosesor abnormal dan mengaturnya ke pabrik utas yang sesuai (yaitu langkah pertama dan kedua).
Keempat, perluas
Jika Anda tahu bahwa prosesor abnormal yang sama akan digunakan di mana -mana dalam kode, cara yang lebih sederhana adalah dengan mengatur domain statis di kelas utas dan mengatur prosesor ini ke prosesor yang tidak memuaskan default.
Prosesor ini hanya dipanggil tanpa prosesor yang tidak memuaskan yang tepat tanpa utas.
Public static void main (string [] args) {thread.setDefaultuncaughtExceptionHandler (baru myuncaugexceptionHandler ());Di atas adalah semua isi dari penangkapan abnormal dari multi -threaded multi -threading Java.