ยุติเธรดหลักโดยไม่รับประกันว่าเธรดที่สร้างจะสิ้นสุด

ฉันได้ติดตั้งโปรแกรมแบบมัลติเธรดที่เกี่ยวข้องกับการวางเธรดสำหรับผู้ใช้แต่ละคน และดำเนินกิจกรรมเล็กๆ น้อยๆ บางอย่าง (ไม่มีกระบวนการที่ละเอียดถี่ถ้วน เช่น การเชื่อมต่อฐานข้อมูลที่เกี่ยวข้อง) เธรดหลักทำงานอย่างไม่มีที่สิ้นสุด และการสิ้นสุดของเธรดจะได้รับการจัดการผ่านการตรวจสอบกิจกรรมการสร้างไฟล์ คำถามของฉันคือ เป็นไปได้หรือไม่ที่จะยุติเธรดหลักทันทีโดยไม่ต้องรอให้เธรดเสร็จสิ้น (สมมติว่าเธรดจะเสร็จสิ้นด้วยตัวเอง (!) อาจเป็นสมมติฐานที่ผิด)


person Farhan    schedule 24.05.2011    source แหล่งที่มา


คำตอบ (3)


แน่นอน.

เธรดหลักเป็นเพียงเธรดเดียวจากคนอื่นๆ และการยุติเธรดนั้นจะไม่ส่งผลกระทบต่อเธรดอื่นๆ (ยกเว้นในกรณีที่คุณไม่ได้ใช้ System.exit() เพื่อหยุดเธรด...)

เธรดหลักเป็นเพียงเธรดแรก*) ที่ได้เริ่มต้น แต่ไม่มีคุณลักษณะหรือฟังก์ชันพิเศษหรือที่ซ่อนอยู่


*) เพื่อให้ง่าย - jvm อาจเริ่มเธรด ภายใน ก่อน main - แต่แอปพลิเคชันไม่มีรหัสสำหรับเธรดเหล่านั้น

person Andreas Dolk    schedule 24.05.2011

ใช่ ประเด็นของเธรดคือเธรดเหล่านั้นทำงานอย่างเป็นอิสระ

มันจะสำคัญถ้าเธรดไคลเอนต์ของคุณเริ่มต้นเป็นเธรด daemon และ main เป็นเธรดเดียวที่ไม่ใช่ daemon (ในกรณีนี้แอปพลิเคชันจะปิดตัวลงเมื่อหยุดทำงาน)

person Peter Lawrey    schedule 24.05.2011

ใช่ และโดยปกติแล้วจะเป็นเช่นนั้นในใบสมัครส่วนใหญ่ เธรดหลักมักจะมีความรับผิดชอบในการเริ่มต้นระบบ และอาจตายอย่างสงบหลังจากนั้น

โปรดทราบว่าคุณไม่ได้ "ยุติ" เธรดหลักจริงๆ แต่เพียงปล่อยให้เธรดหลักดำเนินการจนเสร็จสิ้น และนั่นก็โอเค

person Suraj Chandran    schedule 24.05.2011