“สวัสดี อามีโก้!
"ฉันต้องการบอกคุณเกี่ยวกับสิ่งเล็กน้อย แต่น่าสนใจ"
"ฉันกำลังฟังอยู่ ฉันชอบสิ่งที่เล็กและน่าสนใจ"
"คุณทราบดีว่าวัตถุเธรดทุกตัวมีเมธอด 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) จะให้การอ้างอิงถึง วัตถุเธรดที่เกิดข้อยกเว้น"
"ยิ่งไปกว่านั้น คุณสามารถสร้างเธรดได้หลายสิบเธรด เช่น ในลูปเพื่อทำงานเฉพาะอย่าง โดยทั่วไป การอ้างอิงถึงออบเจกต์เธรดนี้จะไม่ฟุ่มเฟือย ฉันสัญญากับคุณว่า"
“ฉันเชื่อคุณ คุณไม่เคยผิด”