เมื่อโปรแกรม Java เริ่มต้นเธรดจะทำงานทันที ความสำคัญของเธรดหลักสะท้อนให้เห็นในสองด้าน:
แม้ว่าเธรดหลักจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อโปรแกรมเริ่มต้น แต่ก็สามารถควบคุมได้โดยวัตถุเธรด ในการทำเช่นนี้คุณต้องเรียกเมธอด currentthread () เพื่อรับการอ้างอิงซึ่งเป็นสมาชิกคงที่สาธารณะของคลาสเธรด รูปแบบปกติของมันมีดังนี้:
เธรดคงที่ currentThread ()
วิธีนี้ส่งคืนการอ้างอิงไปยังเธรดที่เรียกว่า เมื่อคุณได้รับการอ้างอิงถึงเธรดหลักคุณสามารถควบคุมเธรดหลักเช่นเดียวกับที่คุณควบคุมเธรดอื่น ๆ
เริ่มต้นด้วยการตรวจสอบตัวอย่างต่อไปนี้:
// การควบคุมเธรดหลัก currentthreaddemo {โมฆะคงที่สาธารณะ (สตริง args []) {เธรด t = เธรด currentthread (); ของเธรด t.setName ("My Thread"); .println (n);ในโปรแกรมนี้การอ้างอิงไปยังเธรดปัจจุบัน (หรือเธรดหลัก) จะได้รับโดยการเรียก currentthread () ซึ่งเก็บไว้ในตัวแปรโลคัล t จากนั้นโปรแกรมจะแสดงข้อมูลของเธรด จากนั้นโปรแกรมโทร setName () เพื่อเปลี่ยนชื่อภายในของเธรด ข้อมูลเธรดจะปรากฏขึ้นอีกครั้ง จากนั้นหมายเลขรอบจะเริ่มลดลงจาก 5 หยุดหนึ่งวินาทีในแต่ละครั้ง หยุดชั่วคราวโดยวิธีการนอนหลับ () คำสั่ง Sleep () กำหนดอย่างชัดเจนว่าเวลาหน่วงคือ 1 มิลลิวินาที ให้ความสนใจกับบล็อกลอง/จับนอกลูป
วิธีการนอนหลับ () ของคลาสเธรดอาจเพิ่มข้อยกเว้น InterruptedException สถานการณ์นี้จะเกิดขึ้นเมื่อเธรดอื่นต้องการรบกวนด้ายนอนหลับ ตัวอย่างนี้พิมพ์ข้อความว่ามันถูกขัดจังหวะหรือไม่ ในโปรแกรมจริงคุณต้องมีความยืดหยุ่นในการจัดการกับปัญหาดังกล่าว ต่อไปนี้เป็นผลลัพธ์ของโปรแกรมนี้:
เธรดปัจจุบัน: เธรด [Main, 5, Main] หลังจากเปลี่ยนชื่อ: เธรด [เธรดของฉัน, 5, Main] 54321
โปรดทราบว่า t ถูกใช้เป็นเอาต์พุตเมื่อใช้พารามิเตอร์ในคำสั่ง println () ลำดับการแสดงผล: ชื่อเธรดลำดับความสำคัญและชื่อกลุ่ม โดยค่าเริ่มต้นชื่อของเธรดหลักเป็นหลัก ลำดับความสำคัญของมันคือ 5 ซึ่งเป็นค่าเริ่มต้นและหลักยังเป็นชื่อของกลุ่มเธรดที่เป็นของ กลุ่มเธรดเป็นโครงสร้างข้อมูลที่ควบคุมสถานะของเธรดเป็นชุดทั้งหมด กระบวนการนี้ได้รับการจัดการโดยสภาพแวดล้อมรันไทม์ที่เป็นกรรมสิทธิ์ดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่ หลังจากเปลี่ยนชื่อเธรด t จะส่งออกอีกครั้ง เวลานี้ชื่อเธรดใหม่จะปรากฏขึ้น
มาศึกษาวิธีการที่กำหนดโดยคลาสเธรดในโปรแกรมอย่างระมัดระวังมากขึ้น วิธีการนอนหลับ () บ่งชี้ว่าเธรดถูกเรียกให้ระงับตามเวลามิลลิวินาที รูปแบบปกติของมันมีดังนี้:
การนอนหลับว่างเปล่าแบบคงที่ (ยาวหลายล้านวินาที) พุ่งเข้าหา
เวลาที่จะแขวนถูกกำหนดไว้อย่างชัดเจนว่าเป็นมิลลิวินาที วิธีนี้อาจทำให้เกิดข้อยกเว้น InterruptedException
มีรูปแบบที่สองของวิธีการนอนหลับ () ซึ่งแสดงด้านล่างซึ่งช่วยให้คุณระบุว่าเวลาอยู่ในมิลลิวินาทีหรือนาโนวินาทีเป็นวัฏจักร
การนอนหลับแบบโมฆะแบบคงที่ (ยาวหลายล้านวินาที, int nanoseconds) พุ่งเข้าหาการขัดจังหวะการรับรู้
แบบฟอร์มที่สองจะใช้ได้เฉพาะในกรณีที่ระยะเวลาได้รับอนุญาตในนาโนวินาที ดังที่แสดงในโปรแกรมด้านบนคุณสามารถใช้ setName () เพื่อตั้งค่าชื่อเธรดและใช้ getName () เพื่อรับชื่อเธรด (กระบวนการนี้ไม่ได้สะท้อนในโปรแกรม) วิธีการเหล่านี้เป็นสมาชิกของคลาสเธรดและมีการประกาศดังนี้:
void setName สุดท้าย (String ThreadName) สตริงสุดท้าย getName ()
ที่นี่ threadname หมายถึงชื่อเธรดโดยเฉพาะ