หนึ่ง: ทำไมคุณถึงต้องการพูดคุยเกี่ยวกับการจับภาพผิดปกติแบบหลายเธรดเพียงอย่างเดียว?
ก่อนอื่นดูตัวอย่าง:
Public Class ThreadException ใช้งาน Runnable {@Override Public Void Run () {โยน runtimeException ใหม่ ();}: คอนโซลพิมพ์ข้อมูลผิดปกติเป็นระยะเวลาหนึ่ง คำสั่งการดำเนินการเธรดถูกวางไว้ในบล็อกลองจับไม่มีความช่วยเหลือความผิดปกติของรันไทม์ถูกโยนลงไปด้วยตนเอง ผลการทำงานดังแสดงด้านล่าง:
พบว่าความผิดปกติถูกโยนลงไปในคอนโซลและข้อความในบล็อกจับไม่ได้ถูกพิมพ์
สรุป: การดำเนินการแบบหลายเธรดไม่สามารถจัดการกับความผิดปกติในกระบวนการดำเนินการผิดปกติตามลำดับ การหลบหนีที่ผิดปกติงานนั้นไม่อยู่ในงาน
ดังนั้นเราต้องคิดเกี่ยวกับวิธีการจับภาพความผิดปกติในหลายเธรด?
2. การจับภาพความผิดปกติในหลายเธรด
ทำตามขั้นตอนด้านล่างเพื่อทำการทดสอบให้เสร็จสมบูรณ์:
1. กำหนดโปรเซสเซอร์ข้อยกเว้น
ต้องใช้วิธีการ uncaughtexception ของ Thread.uncaultExceptionHandler ดังนี้: ดังนี้:
/ * * ขั้นตอนที่ 1: กำหนด "โปรเซสเซอร์ผิดปกติ" ที่สอดคล้องกับข้อกำหนดข้อกำหนดโปรเซสเซอร์ที่ผิดปกติของเธรด * Real.uncaughtexceptionhandler ข้อมูลจำเพาะ * / คลาส Myuncaugeptionhandler ใช้ตัวจัดการ { / * * thread.uncaughtexceptionhandler.uncaughtexception () เรียกว่าเมื่อเกือบตาย*/ @Override โมฆะสาธารณะ uncaughtexception (เธรด t, throwable e) {system.out.println ("จับ"+e);}}}2. กำหนดโรงงานเธรดโดยใช้โปรเซสเซอร์ที่ผิดปกตินี้
/** ขั้นตอนที่ 2: กำหนดเธรดโรงงาน* เธรดโรงงานเพื่อแนบงานกับเธรดและผูกเธรดกับโปรเซสเซอร์ที่ผิดปกติ*/คลาส HanlderThreadFactory ใช้ ThreadFactory {@Override Public ThreadRead (Run Nable R) {ระบบ println (นี้+"การสร้างเธรดใหม่"); = "+t.getuncaughtexcegeptionler ()); return t;}}3. กำหนดภารกิจเพื่อให้มันโยนข้อยกเว้น
/ * * ขั้นตอนที่ 3: งานของเราอาจมีข้อยกเว้น ;
4. โทรหาการทดลอง
/** ขั้นตอนที่ 4: ใช้โรงงานเธรดเพื่อสร้างพูลเธรดและเรียกใช้วิธีการดำเนินการ*/คลาสสาธารณะ ThreadExceptionunchexceptionHandler {โมฆะคงที่สาธารณะหลัก (String [] args) {Executorser Vice Exec = Executors.newCachedThreadPool );ผลการทำงานดังแสดงด้านล่าง:
3. บทสรุป
ในการจับภาพความผิดปกติที่เกิดจากเธรดหลายเธรดใน Java คุณต้องปรับแต่งโปรเซสเซอร์ที่ผิดปกติและตั้งค่าเป็นโรงงานเธรดที่สอดคล้องกัน (นั่นคือขั้นตอนแรกและขั้นตอนที่สอง)
ประการที่สี่ขยาย
หากคุณรู้ว่าโปรเซสเซอร์ที่ผิดปกติเดียวกันจะถูกนำไปใช้ทุกที่ในรหัสวิธีที่ง่ายกว่าคือการตั้งค่าโดเมนคงที่ในคลาสเธรดและตั้งโปรเซสเซอร์นี้เป็นโปรเซสเซอร์ที่ไม่น่าพอใจเริ่มต้น
โปรเซสเซอร์นี้เรียกว่าโดยไม่มีโปรเซสเซอร์ที่ไม่น่าพอใจที่เหมาะสมโดยไม่มีเธรด
โมฆะสาธารณะคงที่หลัก (สตริง [] args) {thread.setDefaultuncaughtexceptionHandler (ใหม่ myuncaugexceptionhandler ());ข้างต้นเป็นเนื้อหาทั้งหมดของการจับภาพที่ผิดปกติของมัลติเธรดมัลติเธรดมัลติเธรดของ Java