หากมีการInterruptedException
โยนหมายความว่ามีบางสิ่งที่ต้องการขัดจังหวะ (โดยปกติจะยุติ) เธรดนั้น สิ่งนี้ถูกทริกเกอร์โดยการเรียกใช้interrupt()
เมธอดเธรด วิธีการรอจะตรวจจับสิ่งนั้นและพ่นInterruptedException
เพื่อให้รหัสตรวจจับสามารถจัดการกับคำขอยกเลิกได้ทันทีและไม่ต้องรอจนกว่าจะถึงเวลาที่กำหนด
หากคุณใช้แอพนี้ในแอพแบบเธรดเดียว (และในแอพมัลติเธรดบางแอพ) ข้อยกเว้นนั้นจะไม่ถูกทริกเกอร์ เพิกเฉยโดยมีประโยค catch ที่ว่างเปล่าฉันไม่อยากแนะนำ การขว้างปาInterruptedException
จะล้างสถานะที่ถูกขัดจังหวะของเธรดดังนั้นหากไม่ได้รับการจัดการอย่างถูกต้องข้อมูลจะสูญหายไป ดังนั้นฉันขอเสนอให้เรียกใช้:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
ซึ่งตั้งค่าสถานะนั้นอีกครั้ง หลังจากนั้นเสร็จสิ้นการดำเนินการ นี่จะเป็นพฤติกรรมที่ถูกต้องแม้ไม่เคยใช้ยาก
สิ่งที่อาจจะดีกว่าคือเพิ่มสิ่งนี้:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... คำสั่งไปยังบล็อกจับ. นั่นหมายความว่ามันจะต้องไม่เกิดขึ้น ดังนั้นหากมีการใช้โค้ดซ้ำในสภาพแวดล้อมที่อาจเกิดขึ้นได้ก็จะบ่นเกี่ยวกับเรื่องนี้