Rumah >Java >javaTutorial >Bagaimanakah InterruptedExceptions Harus Dikendalikan di Jawa?

Bagaimanakah InterruptedExceptions Harus Dikendalikan di Jawa?

Barbara Streisand
Barbara Streisandasal
2024-12-30 03:34:23194semak imbas

How Should InterruptedExceptions Be Handled in Java?

Mengendalikan Gangguan di Java: Dua Pendekatan dan Amalan Terbaik

Di Java, pengendalian InterruptedException adalah penting apabila berurusan dengan kaedah yang boleh membuang pengecualian ini. Dua pendekatan biasa untuk mengendalikan gangguan ini ialah:

Menyebarkan Gangguan (Pendekatan Pertama)

try {
 // ...
} catch (InterruptedException e) { 
   Thread.currentThread().interrupt(); 
}

Pendekatan ini sesuai apabila InterruptedException mewakili hasil yang sah bagi kaedah dan harus disebarkan kepada pemanggil. Sebagai contoh, jika kaedah melakukan panggilan rangkaian menyekat yang melemparkan InterruptedException, masuk akal untuk membiarkan pengecualian ini disebarkan, menunjukkan bahawa operasi telah terganggu.

Menangkap dan Menetapkan Bendera Terganggu (Pendekatan Kedua)

try {
 //...
} catch (InterruptedException e) {
   Thread.currentThread().interrupt();
   throw new RuntimeException(e);
}

Pendekatan ini lebih disukai apabila kaedah tidak dapat menghasilkan keputusan yang sah sekiranya berlaku gangguan dan harus ditamatkan. Dengan menetapkan bendera yang terganggu (Thread.currentThread().interrupt()), ia memastikan bahawa utas kekal terganggu, memaklumkan pemanggil tentang gangguan itu.

Memutuskan Pendekatan Terbaik

Yang sesuai pendekatan bergantung pada situasi:

  • Menyebarkan Pengecualian: Jika masuk akal untuk kaedah membenarkan gangguan dan nilai pulangan biasa tidak dapat dihasilkan (mis., menyekat panggilan rangkaian), isytiharkan kaedah dengan lontaran InterruptedException dan biarkan pengecualian itu disebarkan.
  • Menangkap dan Menetapkan Bendera Terganggu: Jika kaedah tidak dapat menyelesaikan operasi atau mengembalikan hasil yang sah, tangkap pengecualian, tetapkan bendera yang terganggu, dan buang pengecualian masa jalan.

Contoh (Pendekatan Kedua)

void printSum(Server server) {
     try {
         int sum = computeSum(server);
         System.out.println("Sum: " + sum);
     } catch (InterruptedException e) {
         Thread.currentThread().interrupt();  // set interrupt flag
         System.out.println("Failed to compute sum");
     }
}

Di sini, kaedah printSum tidak dapat menyelesaikan operasinya jika terganggu, jadi ia menangkap InterruptedException, menetapkan gangguan bendera, dan mencetak mesej alternatif.

Atas ialah kandungan terperinci Bagaimanakah InterruptedExceptions Harus Dikendalikan di Jawa?. 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