"นี่เป็นหัวข้อใหม่และน่าสนใจ"
"ปรากฎว่าคุณสามารถเริ่มเธรดในโหมดต่างๆ"
"โปรแกรมมาตรฐาน (ที่มีเธรดเดียว) หยุดทำงานเมื่อเธรดหลักทำงานเสร็จสิ้น เธรดหลักดำเนินการเสร็จสิ้น โปรแกรมหยุดทำงาน และ JVM ปล่อยหน่วยความจำให้ว่าง"
"หากเราเปิดเธรดย่อย โปรแกรมจะทำงานต่อไป แม้ว่าเธรดหลักจะเสร็จสิ้น JVM จะไม่ยุติตราบใดที่มีเธรดที่รันอยู่อย่างน้อยหนึ่งเธรด เมื่อเธรดที่รันทั้งหมดเสร็จสิ้น โปรแกรมจะปิด"
"โปรแกรมขนาดใหญ่มักมีสิ่งที่เรียกว่า 'เธรดบริการ' ซึ่งมีหน้าที่ให้บริการส่วนอื่น ๆ ของโปรแกรม โดยตัวมันเองไม่จำเป็น ตัวอย่างเช่น: การลบวัตถุที่ไม่ได้ใช้ (การรวบรวมขยะ) การทิ้งหน่วยความจำ และข้อผิดพลาด การบันทึก รายงานต่างๆ เกี่ยวกับสถานะปัจจุบันของโปรแกรม และอื่นๆ และอื่นๆ"
"เธรดบริการเหล่านี้จำเป็นเมื่อโปรแกรมกำลังทำงาน แต่ไม่จำเป็นสำหรับเธรดเหล่านี้"
“ครับ ผมเข้าใจแล้ว”
"Java ให้คุณรันเธรดเป็นdaemonได้ เธรดดังกล่าวทำงานเหมือนกับเธรดอื่นๆ แต่ถ้าเธรดที่ไม่ใช่ daemon ทั้งหมดในโปรแกรมสิ้นสุดลงและเหลือเพียงเธรด daemon เท่านั้น JVM จะปิดโปรแกรม"
"การประกาศเธรด 'บริการ' ก็หมายความว่าจะไม่ได้รับการพิจารณาเมื่อโปรแกรมถูกยกเลิก นั่นคือทั้งหมดหรือไม่"
"เอ่อ... แน่ใจนะว่าพูดสั้นๆแต่ไพเราะ จริงๆ แล้วนั่นคือสิ่งที่ฉันอยากจะบอกคุณ"
"ความกะทัดรัดคือพรสวรรค์ และหุ่นยนต์ที่มีความสามารถก็มีความสามารถในทุกสิ่ง"
"มีคำถามอะไรไหม?"
"คุณจะเริ่มต้นเธรดในฐานะดีมอนได้อย่างไร สืบทอดจากคลาส DaemonThread บางส่วน"
"ไม่ มันง่ายกว่านั้นมาก คลาสเธรดมีเมธอด setDaemon(boolean) คุณแค่ต้องผ่านเป็น true แค่นั้น คุณแค่ต้องเรียกมันก่อนที่จะเรียกเมธอด start() ก่อนที่เธรดจริงจะเป็น สร้างแล้ว คุณไม่สามารถเปลี่ยนประเภทของเธรดได้หลังจากที่เธรดเริ่มทำงาน"
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();
"แล้วมันคืออะไร?"
"ใช่."
"ฉันต้องการดึงความสนใจของคุณอีกครั้งสู่กระบวนการสร้างและเริ่มเธรด"
"การสร้างอ็อบเจกต์เธรดไม่ได้สร้างเธรด อ็อบเจ็กต์เธรดไม่ใช่เธรด JVM สร้างเธรดเมื่อมีการเรียกใช้เมธอด start() เธรดเป็นอ็อบเจกต์ JVM พิเศษที่ให้คุณเข้าถึงข้อมูลเกี่ยวกับเธรดและให้ คุณควบคุมมันได้นิดหน่อย”
“ฉันเข้าใจแล้ว ขอบคุณ เอลลี่”
GO TO FULL VERSION