JavaRush /จาวาบล็อก /Random-TH /ระดับ 25 คำตอบสำหรับคำถามสัมภาษณ์ในหัวข้อระดับ
zor07
ระดับ
Санкт-Петербург

ระดับ 25 คำตอบสำหรับคำถามสัมภาษณ์ในหัวข้อระดับ

เผยแพร่ในกลุ่ม
ระดับ 25 คำตอบสำหรับคำถามสัมภาษณ์ในหัวข้อระดับ - 1
  1. สถานะของวัตถุทั้งหมดคืออะไรThread?

    • ใหม่
    • วิ่งได้
    • ถูกบล็อก
    • ซึ่งรอคอย
    • TIMED_WAITING
    • สิ้นสุด
  2. เธรดสามารถไปสถานะใดเมื่อเข้าสู่บล็อกsynchronized?

    • วิ่งได้
    • ถูกบล็อก

    ใน RUNNABLE ถ้าบล็อกของโค้ดที่ทำเครื่องหมายsynchronizedไม่ถูกครอบครองโดยเธรดอื่น มิฉะนั้น เธรดของเราจะได้รับสถานะ BLOCKED และจะรอให้อ็อบเจ็กต์ mutex ถูกปล่อยออกมา

  3. เธรดจะอยู่ในสถานะใดเมื่อเรียกใช้เมธอดwait()?

    การเรียกเมธอดนี้จะทำให้เธรดอยู่ในสถานะรอ
    วิธีการนี้wait()สามารถเรียกได้ภายในบล็อกsynchronizedบนวัตถุ mutex ที่ถูก "ล็อค" โดยเธรดปัจจุบันเท่านั้น มิฉะนั้น วิธีการจะส่งข้อ ยกเว้น IllegalMonitorStateException

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    เมื่อเรียกใช้เมธอดwait()เธรดปัจจุบันจะปลดล็อกจากอ็อบเจ็กต์ และเข้าสู่สถานะ WAITING โดยรอให้ เธรดอื่นmonitorเรียกใช้monitor.notify()เมธอด monitor.notifyAll()ทันทีที่เกิดเหตุการณ์นี้ เธรดจะเริ่มทำงาน และหากจอภาพไม่ยุ่ง เธรดก็จะดึงเธรดนั้นและทำงานต่อไป
    หากมอนิเตอร์ถูกครอบครองโดยเธรดอื่น เธรดปัจจุบันจะเข้าสู่สถานะ BLOCKED

  4. เธรดจะอยู่ในสถานะใดเมื่อเรียกใช้เมธอดwait(500)?

    การเรียกเมธอดนี้จะทำให้เธรดอยู่ในสถานะ TIMED_WAITING โดยการ เปรียบเทียบ
    กับเมธอดจะสามารถเรียกได้เฉพาะภายในบล็อกบนอ็อบเจ็กต์ mutex ที่ถูก "ล็อค (ล็อค)" โดยเธรดปัจจุบันwait()wait(timeout)synchronized

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait(500);}

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

    เธรดจะอยู่ในสถานะใดเมื่อเรียกใช้เมธอดnotify()?

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    หลังจากนั้น monitor.wait()เธรดจะเข้าสู่สถานะ WAITING วิธีการnotify()ที่ถูกเรียกโดยเธรดอื่นบนออบเจ็กต์monitorจะย้ายเธรดจากสถานะ WAITING ไปเป็นสถานะ RUNNABLE เว้นแต่ว่าวัตถุมอนิเตอร์จะถูกจับโดยเธรดอื่น มิฉะนั้นจะอยู่ในสถานะ BLOCKED

  5. เธรดจะอยู่ในสถานะใดเมื่อเรียกใช้เมธอดnotifyAll()?

    notifyAll()“จะอยู่” ทุกกระทู้ หนึ่งในเธรด "สลีป" (รอ) จะเข้าสู่สถานะ RUNNABLE เข้าควบคุมมอนิเตอร์ของอ็อบเจ็กต์ที่ใช้งานอยู่และทำงานต่อไป ส่วนที่เหลือจะอยู่ในสถานะถูกบล็อก ทันทีที่เธรด "ตื่น" ตัวแรกปล่อยจอภาพซึ่งทุกคนรอคอย ชะตากรรมของมันจะถูกทำซ้ำในเธรดถัดไป (เธรดที่กำหนดเองจะเปลี่ยนจากสถานะ BLOCKED ไปเป็นสถานะ RUNNABLE) สิ่งนี้จะดำเนินต่อไปจนกว่าเธรดที่ "ตื่นขึ้น" ทั้งหมดจะออกจากสถานะ BLOCKED

  6. สามเธรดในบล็อกซิงโครไนซ์ที่เรียกว่าwait()อ็อบเจ็กต์ mutex notifyAll()เธรดเหล่านี้จะอยู่ในสถานะ ใดหากเธรดที่สี่เรียกใช้

    สองอันจะเข้าสู่สถานะ BLOCKED และอีกอันจะเข้าสู่สถานะ RUNNABLE

  7. แตกต่างอย่างไรjoin(500)กับwait(500)?

    แม้ว่าข้อเท็จจริงที่ว่า และjoin(500)จะwait(500)ถ่ายโอนเธรดปัจจุบันไปยังสถานะ TIMED_WAITING แต่ก็มีความแตกต่างที่สำคัญระหว่างเธรดเหล่านั้น:
    join(500)เรียกใช้บนเธรดwait(500)เรียกใช้ภายในบล็อกที่ซิงโครไนซ์บนออบเจ็กต์ที่บล็อกนี้ซิงโครไนซ์
    เมื่อถูกเรียกjoin(500)เธรดปัจจุบันจะรอ 500 มิลลิวินาทีสำหรับเธรดที่join()มีการเรียกเมธอดให้เสร็จสิ้น
    เมื่อเรียกwait(500)เธรดปัจจุบันจะปลดล็อกจากออบเจ็กต์ที่ซิงโครไนซ์และเข้าสู่โหมดสลีปเป็นเวลา 500 มิลลิวินาที
    หลังจากผ่านไป 500 มิลลิวินาที ในทั้งสองกรณี เธรดจะยังคงทำงานต่อไป

  8. แตกต่างอย่างไรwait(500)กับsleep(500)?

    sleep(500)เรียกบนเธรด เรียกwait(500)ภายในบล็อกที่ซิงโครไนซ์บนออบเจ็กต์ที่บล็อกนี้ซิงโครไนซ์
    เมื่อถูกเรียกsleep(500)เธรดปัจจุบันจะรอ 500 มิลลิวินาที จากนั้นจึงทำงานต่อไป
    เมื่อเรียกwait(500)เธรดปัจจุบันจะปลดล็อกจากออบเจ็กต์ที่ซิงโครไนซ์และเข้าสู่โหมดสลีปเป็นเวลา 500 มิลลิวินาที

  9. เธรดจะอยู่ในสถานะใดเมื่อเรียกใช้เมธอดyield()?

    เมื่อเรียกใช้เมธอดyield()เธรดปัจจุบันจะ "ข้ามเทิร์น" และจาวาจะสลับไปที่การดำเนินการเธรดถัดไปทันที เธรดไปจากรัฐหนึ่งrunningไปอีกรัฐreadyหนึ่ง สถานะกำลังทำงานและพร้อมเป็นสถานะย่อยของสถานะ RUNNABLE

PS.ยินดีรับฟังความคิดเห็น เพิ่มเติม แก้ไข หมายเหตุ =)
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION