“สวัสดี อามีโก้!

"ฉันต้องการบอกคุณเกี่ยวกับสิ่งเล็กน้อย แต่น่าสนใจ"

"ฉันกำลังฟังอยู่ ฉันชอบสิ่งที่เล็กและน่าสนใจ"

"คุณทราบดีว่าวัตถุเธรดทุกตัวมีเมธอด run() และคุณสามารถดำเนินการบนเธรดแยกต่างหากโดยใช้เมธอด start()"

"แน่นอน."

"แต่ลองจินตนาการถึงสถานการณ์นี้: คุณเริ่มเธรดเพื่อทำงานบางอย่าง แต่เกิดข้อยกเว้นและเธรดหยุดทำงานเพราะไม่รู้ว่าต้องทำอะไร คุณไม่จำเป็นต้องรู้เกี่ยวกับข้อผิดพลาดนี้หรือไม่"

"ฉันเห็นด้วย ฉันต้องจับข้อยกเว้นที่เกิดขึ้นบนเธรดอื่นที่รันอยู่ Java รองรับสิ่งนั้นหรือไม่"

"คุณดูถูกฉัน แน่นอนว่ามันไม่"

"ผู้สร้างของ Java คิดค้นอินเทอร์เฟซพิเศษที่เรียกว่า UncaughtExceptionHandler ต่อไปนี้คือวิธีจับและจัดการกับข้อยกเว้นที่เกิดขึ้นบนเธรดอื่น หากเธรดนั้นจับไม่ได้:"

ตัวอย่าง
public class DownloadManager
{
 public static void main(String[] args)
 {
   Thread thread = new DownloadThread();
   thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
   {
    @Override
    public void uncaughtException(Thread t, Throwable e)
    {

    }
 });

 thread.start();
}

"อ็อบเจกต์เธรดมี เมธอด setUncaughtExceptionHandler พิเศษ คุณต้องส่งต่ออ็อบเจกต์ที่ใช้ อินเตอร์เฟส Thread.UncaughtExceptionHandlerอินเทอร์เฟซนี้มีเพียงเมธอดเดียวเท่านั้น: uncaughtException(Thread t, Throwable e)นี่คือเมธอดที่จะถูกเรียกใช้ วัตถุที่ส่งผ่านหากมีข้อยกเว้นที่ไม่ถูกตรวจจับเกิดขึ้นในวิธีการเรียกใช้"

"ในตัวอย่างของฉันข้างต้น ฉันเพียงแค่ประกาศคลาสภายในที่ไม่ระบุชื่อ (เน้นด้วยสีแดง) ที่ใช้อิน เทอร์เฟซ Thread.Thread.UncaughtExceptionHandlerและฉันแทนที่เมธอดuncaughtException(Thread t, Throwable e) "

"อย่างที่คุณเห็นจากรายการพารามิเตอร์ของเมธอด จะมีการส่งอาร์กิวเมนต์สองรายการ: การอ้างอิงไปยังออบเจกต์เธรดที่เกิดข้อยกเว้น และข้อยกเว้นเอง ส่งผ่านเป็น Throwable e"

"เหตุใดฉันจึงต้องการตัวแปรเธรด t เราไม่รู้มาก่อนว่าเรากำลังใส่เธรดใด ในออบเจกต์ Thread.UncaughtExceptionHandler "

"พวกเขาทำเช่นนี้เพื่อให้คุณสามารถเขียนตัวจัดการสากลสำหรับสถานการณ์เหล่านี้ กล่าวคือ คุณสามารถสร้างวัตถุเดียวและส่งต่อไปยังเธรดต่างๆ หลายสิบเธรด จากนั้นเมธอด uncaughtException(Thread t, Throwable e) จะให้การอ้างอิงถึง วัตถุเธรดที่เกิดข้อยกเว้น"

"ยิ่งไปกว่านั้น คุณสามารถสร้างเธรดได้หลายสิบเธรด เช่น ในลูปเพื่อทำงานเฉพาะอย่าง โดยทั่วไป การอ้างอิงถึงออบเจกต์เธรดนี้จะไม่ฟุ่มเฟือย ฉันสัญญากับคุณว่า"

“ฉันเชื่อคุณ คุณไม่เคยผิด”