"นี่เป็นหัวข้อใหม่และน่าสนใจ"

"ปรากฎว่าคุณสามารถเริ่มเธรดในโหมดต่างๆ"

"โปรแกรมมาตรฐาน (ที่มีเธรดเดียว) หยุดทำงานเมื่อเธรดหลักทำงานเสร็จสิ้น เธรดหลักดำเนินการเสร็จสิ้น โปรแกรมหยุดทำงาน และ JVM ปล่อยหน่วยความจำให้ว่าง"

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

"โปรแกรมขนาดใหญ่มักมีสิ่งที่เรียกว่า 'เธรดบริการ' ซึ่งมีหน้าที่ให้บริการส่วนอื่น ๆ ของโปรแกรม โดยตัวมันเองไม่จำเป็น ตัวอย่างเช่น: การลบวัตถุที่ไม่ได้ใช้ (การรวบรวมขยะ) การทิ้งหน่วยความจำ และข้อผิดพลาด การบันทึก รายงานต่างๆ เกี่ยวกับสถานะปัจจุบันของโปรแกรม และอื่นๆ และอื่นๆ"

"เธรดบริการเหล่านี้จำเป็นเมื่อโปรแกรมกำลังทำงาน แต่ไม่จำเป็นสำหรับเธรดเหล่านี้"

“ครับ ผมเข้าใจแล้ว”

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

"การประกาศเธรด 'บริการ' ก็หมายความว่าจะไม่ได้รับการพิจารณาเมื่อโปรแกรมถูกยกเลิก นั่นคือทั้งหมดหรือไม่"

"เอ่อ... แน่ใจนะว่าพูดสั้นๆแต่ไพเราะ จริงๆ แล้วนั่นคือสิ่งที่ฉันอยากจะบอกคุณ"

"ความกะทัดรัดคือพรสวรรค์ และหุ่นยนต์ที่มีความสามารถก็มีความสามารถในทุกสิ่ง"

"มีคำถามอะไรไหม?"

"คุณจะเริ่มต้นเธรดในฐานะดีมอนได้อย่างไร สืบทอดจากคลาส DaemonThread บางส่วน"

"ไม่ มันง่ายกว่านั้นมาก คลาสเธรดมีเมธอด setDaemon(boolean) คุณแค่ต้องผ่านเป็น true แค่นั้น คุณแค่ต้องเรียกมันก่อนที่จะเรียกเมธอด start() ก่อนที่เธรดจริงจะเป็น สร้างแล้ว คุณไม่สามารถเปลี่ยนประเภทของเธรดได้หลังจากที่เธรดเริ่มทำงาน"

ตัวอย่าง:
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();

"แล้วมันคืออะไร?"

"ใช่."

"ฉันต้องการดึงความสนใจของคุณอีกครั้งสู่กระบวนการสร้างและเริ่มเธรด"

"การสร้างอ็อบเจกต์เธรดไม่ได้สร้างเธรด อ็อบเจ็กต์เธรดไม่ใช่เธรด JVM สร้างเธรดเมื่อมีการเรียกใช้เมธอด start() เธรดเป็นอ็อบเจกต์ JVM พิเศษที่ให้คุณเข้าถึงข้อมูลเกี่ยวกับเธรดและให้ คุณควบคุมมันได้นิดหน่อย”

“ฉันเข้าใจแล้ว ขอบคุณ เอลลี่”