ฉันกำลังพยายามใช้ThreadPoolExecutor
คลาสของ Java เพื่อทำงานหนักจำนวนมากด้วยจำนวนเธรดที่แน่นอน แต่ละงานมีหลายสถานที่ซึ่งอาจล้มเหลวเนื่องจากข้อยกเว้น
ฉันได้ subclassed ThreadPoolExecutor
และฉันได้แทนที่afterExecute
วิธีที่ควรจะให้ข้อยกเว้นที่ไม่ถูกตรวจพบในขณะที่ทำงาน อย่างไรก็ตามฉันไม่สามารถใช้งานได้
ตัวอย่างเช่น:
public class ThreadPoolErrors extends ThreadPoolExecutor {
public ThreadPoolErrors() {
super( 1, // core threads
1, // max threads
1, // timeout
TimeUnit.MINUTES, // timeout units
new LinkedBlockingQueue<Runnable>() // work queue
);
}
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if(t != null) {
System.out.println("Got an error: " + t);
} else {
System.out.println("Everything's fine--situation normal!");
}
}
public static void main( String [] args) {
ThreadPoolErrors threadPool = new ThreadPoolErrors();
threadPool.submit(
new Runnable() {
public void run() {
throw new RuntimeException("Ouch! Got an error.");
}
}
);
threadPool.shutdown();
}
}
ผลลัพธ์จากโปรแกรมนี้คือ "ทุกอย่างเรียบร้อย - สถานการณ์ปกติ!" แม้ว่า Runnable เดียวที่ส่งไปยังเธรดพูลจะมีข้อยกเว้น เบาะแสอะไรที่เกิดขึ้นที่นี่?
ขอบคุณ!