คำถามและคำตอบสัมภาษณ์แบบมัลติเธรด 40 อันดับแรก (2025)
คำถามสัมภาษณ์งาน Java Multithreading ยอดนิยม
ต่อไปนี้เป็นคำถามสัมภาษณ์แบบมัลติเธรด คำถามและคำตอบสำหรับนักศึกษาใหม่รวมถึงผู้สมัครที่มีประสบการณ์เพื่อให้ได้งานในฝัน
1) เธรดคืออะไร?
เธรดเป็นหน่วยของการดำเนินการที่เกิดขึ้นพร้อมกัน เราสามารถพูดได้ว่าเป็นส่วนหนึ่งของกระบวนการที่สามารถทำงานไปพร้อมกับส่วนอื่น ๆ ของกระบวนการได้อย่างง่ายดาย
ดาวน์โหลดไฟล์ PDF ฟรี: คำถามและคำตอบสัมภาษณ์แบบมัลติเธรด
2) มัลติเธรดคืออะไร?
มัลติเธรด ใน Java เป็นกระบวนการดำเนินการสองเธรดขึ้นไปพร้อมกันเพื่อการใช้งาน CPU สูงสุด
ข้อได้เปรียบหลักคือ:
- เธรดใช้พื้นที่ที่อยู่เดียวกัน
- ด้ายยังคงมีน้ำหนักเบา
- ต้นทุนการสื่อสารระหว่างเธรดต่ำ
3) สถานะที่เกี่ยวข้องกับเธรดคืออะไร?
- พร้อม
- เล่น
- ที่รอ
- สภาพตาย
4) อภิปรายเกี่ยวกับวงจรชีวิตของเธรด?
วงจรชีวิตของเธรดจะคล้ายกับวงจรชีวิตของกระบวนการที่ทำงานอยู่ใน ระบบปฏิบัติการ- ในระหว่างวงจรชีวิต เธรดสามารถย้ายจากสถานะหนึ่งไปอีกสถานะหนึ่งได้ อย่างไรก็ตาม ขึ้นอยู่กับการดำเนินการที่ทำอยู่
5) สถานะของเธรดคืออะไร?
ต่อไปนี้เป็นสถานะของเธรดที่แตกต่างกัน:
ใหม่: เธรดที่เพิ่งสร้างอินสแตนซ์อยู่ในสถานะใหม่ เมื่อเรียกใช้เมธอด start() เธรดจะกลายเป็นสถานะพร้อม จากนั้นจะถูกย้ายไปยังสถานะที่รันได้โดยตัวกำหนดตารางเวลาเธรด
- รันได้: เธรดที่พร้อมที่จะรัน
- เล่น: เธรดที่กำลังดำเนินการอยู่ในสถานะกำลังทำงาน
- ถูกบล็อก: เธรดที่ถูกบล็อกกำลังรอการล็อคจอภาพอยู่ในสถานะนี้ สิ่งนี้สามารถเกิดขึ้นได้เมื่อเธรดดำเนินการ I/O และย้ายไปยังสถานะถัดไป
- ที่รอ: เป็นเธรดที่กำลังรอให้เธรดอื่นดำเนินการเฉพาะ
- หมดเวลา_รอ: เป็นเธรดที่กำลังรอให้เธรดอื่นดำเนินการ
- สิ้นสุด: เธรดที่ออกแล้วอยู่ในสถานะนี้
6) อะไรคือความแตกต่างที่สำคัญระหว่าง Thread และ Process?
เธรดเป็นส่วนหนึ่งของกระบวนการ กระบวนการสามารถมีหลายเธรด กระบวนการสามารถทำงานบนพื้นที่หน่วยความจำที่แตกต่างกัน แต่เธรดทั้งหมดใช้พื้นที่หน่วยความจำเดียวกัน
7) การหยุดชะงักคืออะไร?
Deadlock เป็นสถานการณ์เมื่อเธรดกำลังรอการล็อกอ็อบเจ็กต์ ที่ได้รับจากเธรดอื่น และเธรดที่สองยังรอการล็อกอ็อบเจ็กต์ที่ได้รับจากเธรดแรกด้วย เนื่องจากทั้งสองเธรดกำลังรอกันและกันเพื่อปล่อยเงื่อนไขนี้เรียกว่าการหยุดชะงัก
8) LiveLock คืออะไร?
Livelock เกิดขึ้นเมื่อเธรดทั้งหมดถูกบล็อกและไม่สามารถดำเนินการได้เนื่องจากทรัพยากรที่จำเป็นไม่พร้อมใช้งาน และไม่มีเธรดใด ๆ ที่ถูกบล็อก
Livelock สามารถเกิดขึ้นได้ในเงื่อนไขต่อไปนี้:
- เมื่อเธรดทั้งหมดในโปรแกรมดำเนินการบนอ็อบเจ็กต์ที่มีพารามิเตอร์เป็นศูนย์ โปรแกรมมีการล็อคอยู่และไม่เคยประมวลผลจนกว่าหนึ่งเธรดขึ้นไปจะเรียก Object.notify () หรือ Object.notifyAll() บนอ็อบเจ็กต์ที่เกี่ยวข้อง
- Livelock ยังเกิดขึ้นเมื่อเธรดทั้งหมดในโปรแกรมติดอยู่ในลูปไม่สิ้นสุด
9) จอภาพคืออะไร?
- จอภาพเป็นเนื้อหาของโค้ดที่สามารถดำเนินการได้ครั้งละหนึ่งเธรดเท่านั้น
- หากเธรดอื่นพยายามเข้าถึงในเวลาเดียวกัน เธรดนั้นจะถูกระงับจนกว่าเธรดปัจจุบันจะปล่อย Monitor
10) ความอดอยากของเส้นด้ายหมายถึงอะไร?
ในสถานการณ์ที่เธรดมี CPU ไม่เพียงพอสำหรับการดำเนินการ การอดอาหารของเธรดจะเกิดขึ้น
อย่างไรก็ตาม อาจเกิดขึ้นได้ในสถานการณ์ต่อไปนี้
- เธรดที่มีลำดับความสำคัญต่ำจะได้รับ CPU น้อยกว่าเมื่อเปรียบเทียบกับเธรดที่มีลำดับความสำคัญสูง เธรดที่มีลำดับความสำคัญต่ำกว่าอาจทำให้อดใจรอเพื่อให้ได้พื้นที่ CPU มากขึ้นเพื่อทำการคำนวณ
- เธรดอาจรอการล็อกบนจอภาพของวัตถุอย่างไม่มีกำหนด แต่การแจ้งเตือน () อาจปลุกเธรดอื่น ๆ ซ้ำ ๆ ในกรณีนี้ ด้ายก็จะขาดหายไปเช่นกัน
11) การหมุนยุ่งในมัลติเธรดหมายถึงอะไร?
การหมุนยุ่งเป็นเทคนิคที่โปรแกรมเมอร์ใช้งานพร้อมกันเพื่อทำให้เธรดรอตามเงื่อนไขบางประการ สิ่งนี้ค่อนข้างแตกต่างจากวิธีการทั่วไปเช่น wait() และ sleep() ซึ่งทั้งหมดนี้เกี่ยวข้องกับการละทิ้งการควบคุม CPU เมธอดนี้ไม่จำเป็นต้องละทิ้ง CPU แต่เป็นเพียงการรันลูปว่าง
12) การสลับบริบทในแบบมัลติเธรดคืออะไร?
เป็นกระบวนการจัดเก็บและกู้คืนสถานะ CPU ซึ่งจะช่วยให้ เรซูเม่ การดำเนินการเธรดจากจุดเดียวกันในเวลาต่อมา เป็นหนึ่งในคุณสมบัติที่สำคัญสำหรับระบบปฏิบัติการมัลติทาสกิ้งและการรองรับสภาพแวดล้อมแบบมัลติเธรด
13) เหตุใดพฤติกรรมของเธรดจึงคาดเดาไม่ได้
เราสามารถพูดได้ว่าพฤติกรรมของเธรดนั้นไม่สามารถคาดเดาได้เนื่องจากการดำเนินการของ Threads ขึ้นอยู่กับตัวกำหนดเวลาของเธรด สิ่งหนึ่งที่ควรจำไว้ว่าตัวกำหนดเวลาเธรดทุกตัวมีการใช้งานที่แตกต่างกันบนแพลตฟอร์มที่แตกต่างกัน เช่น Windows, Unix เป็นต้น
14) คุณจะหยุดการทำงานของ Thread ชั่วคราวเป็นระยะเวลาหนึ่งได้อย่างไร?
วิธี sleep () ใช้เพื่อหยุดการทำงานของเธรดชั่วคราวเป็นระยะเวลาหนึ่ง อย่างไรก็ตาม การดำเนินการนี้จะไม่หยุดการประมวลผลเธรดในช่วงเวลาที่กำหนด อย่างไรก็ตาม เมื่อเธรดตื่นจากโหมดสลีป สถานะจะเปลี่ยนเป็นสามารถรันได้และขึ้นอยู่กับการกำหนดเวลาของเธรด เธรดนั้นจะถูกดำเนินการ
15) เธรดสามารถเข้าสู่สถานะรอได้หลายวิธีมีกี่วิธี?
เธรดสามารถเข้าสู่สถานะรอได้ด้วยวิธีต่อไปนี้
- ใช้วิธี sleep()
- การบล็อก I/O
- พยายามรับการล็อคของวัตถุไม่สำเร็จ
- โดยการเรียกใช้เมธอด wait() ของวัตถุ
16) จะเกิดอะไรขึ้นถ้าเราไม่แทนที่วิธีการทำงาน?
ใน Java เมื่อเราเรียกเมธอด start() บนเธรด มันจะเรียกเมธอด run() ภายในด้วยเธรดที่สร้างขึ้นใหม่ ดังนั้นหากเราไม่แทนที่เมธอด run( ) เธรดที่สร้างขึ้นใหม่จะไม่ถูกเรียก ดังนั้นจึงไม่มีอะไรเกิดขึ้น
ตัวอย่าง:
class MyThread extends Thread { //don't override run() method } public class DontOverrideRun { public static void main(String[] args) { System.out.println("main has started."); MyThread thread1=new MyThread(); thread1.start(); System.out.println("main has ended."); } }
17) อะไรคือความแตกต่างที่สำคัญระหว่างวิธี Thread.start() และ Thread?run()?
วิธี Thread.start() (วิธีดั้งเดิม) ของคลาส Thread ทำหน้าที่เรียกใช้เมธอด Thread.A run() ในเธรด ดังนั้นหากเราเรียก Thread โดยตรง เมธอด run() ก็จะดำเนินการในเธรดเดียวกันเช่นกัน ดังนั้นมันจะไม่แก้จุดประสงค์ของการสร้างกระทู้ใหม่
18) จะสร้างเธรดใน java ได้อย่างไร?
มีสองวิธีในการสร้างเธรดใน java
- ขั้นแรกโดยการใช้อินเทอร์เฟซ Runnable จากนั้นสร้างวัตถุเธรดจากนั้น
- วิธีที่สองคือการขยายคลาสเธรด
19) ลำดับความสำคัญของเธรดคืออะไร?
ทุกเธรดมีลำดับความสำคัญ อย่างไรก็ตาม ลำดับความสำคัญที่สูงกว่าจะมีความสำคัญเหนือกว่าในการดำเนินการด้วย อย่างไรก็ตาม ยังขึ้นอยู่กับการใช้งาน Thread Scheduler ซึ่งขึ้นอยู่กับระบบปฏิบัติการด้วย เป็นไปได้ที่จะเปลี่ยนลำดับความสำคัญของเธรด แต่ไม่ได้รับประกันว่าเธรดที่มีลำดับความสำคัญสูงกว่าจะถูกดำเนินการก่อน
20) วิธีการ join() ทำอะไรได้บ้าง?
join() วิธีการรอให้เธรดตาย บังคับให้เธรดที่ทำงานอยู่ทั้งหมดหยุดดำเนินการจนกว่าจะถึงเวลาที่เธรดเข้าร่วมเพื่อทำงานให้เสร็จสิ้น
21) Java Shutdown Hook คืออะไร
เบ็ดการปิดระบบ Java ใช้เพื่อล้างข้อมูลทรัพยากรเมื่อ JVM ปิดระบบ ทำความสะอาดทรัพยากรหมายถึงการปิดไฟล์บันทึก การส่งการแจ้งเตือนหรืออย่างอื่น ต้องใช้ hook Shutdown เพื่อรันโค้ดก่อนที่ JVM จะปิดตัวลง
22) การใช้งานหลักสองประการของ volatile ใน Java คืออะไร?
เธรดได้รับอนุญาตให้เก็บค่าของตัวแปรไว้ในหน่วยความจำภายในเครื่อง หากตัวแปรถูกทำเครื่องหมายว่าระเหยได้ ทุกครั้งที่ใช้ตัวแปรเดียวกัน จะต้องอ่านตัวแปรนั้นจากหน่วยความจำหลัก
ในทำนองเดียวกัน ทุกครั้งที่เขียนตัวแปร ค่าจะต้องถูกเก็บไว้ในหน่วยความจำหลัก
23) คุณจะแบ่งปันข้อมูลระหว่างสองเธรดใน Java ได้อย่างไร?
เราสามารถรับข้อมูลระหว่างเธรดโดยใช้วัตถุที่ใช้ร่วมกันหรือเกิดขึ้นพร้อมกัน โครงสร้างข้อมูล เช่น BlockingQueue ใช้รูปแบบผู้ผลิต-ผู้บริโภคโดยใช้วิธีการรอและแจ้งเตือน นอกจากนี้ยังเกี่ยวข้องกับการแชร์วัตถุระหว่างสองเธรด
24) สามารถควบคุมหลายเธรดพร้อมกันได้อย่างไร?
สามารถควบคุมหลายเธรดพร้อมกันได้หากสร้างขึ้นในวัตถุ ThreadGroup
25) วิธีการบล็อกใน Java คืออะไร?
ในวิธีการบล็อก Java เป็นวิธีการที่บล็อกจนกว่างานจะเสร็จสิ้น ตัวอย่างเช่นยอมรับ () วิธีการบล็อก ServerSocket จนกระทั่งเวลาที่ลูกค้าเชื่อมต่อ ในที่นี้ การบล็อกหมายถึงสิ่งใดก็ตามที่การควบคุมจะไม่กลับไปยังผู้โทรจนกว่างานจะเสร็จสิ้น
26) อะไรคือความแตกต่างที่สำคัญระหว่างวิธีการ wait () และ sleep ()?
รอ() | การนอนหลับ() |
วิธีการนี้ถูกกำหนดไว้ในคลาส Object | วิธีการถูกกำหนดไว้ในคลาสเธรด |
Wait() วิธีการปลดล็อค | วิธีนี้จะไม่มีวันปลดล็อก |
27) วัตถุที่ไม่เปลี่ยนรูปคืออะไร? จะช่วยเขียนแอพพลิเคชั่นพร้อมกันได้อย่างไร?
วัตถุใด ๆ ถือได้ว่าไม่มีใครท้าทายได้หากสถานะของมันไม่เปลี่ยนแปลงหลังจากถูกสร้างขึ้น ออบเจ็กต์ที่ไม่เปลี่ยนรูปถูกนำมาใช้ในการสร้างแอปพลิเคชันที่เรียบง่าย เชื่อถือได้ และทำงานพร้อมกัน
สำหรับการสร้างอ็อบเจ็กต์ที่ไม่เปลี่ยนรูป สิ่งสำคัญคือต้องทำให้คลาสและสมาชิกเป็นคลาสสุดท้าย เพื่อว่าเมื่ออ็อบเจ็กต์ถูกสร้างขึ้น สถานะของคลาสจะไม่ถูกแก้ไข
28) บอกฉันถึงความแตกต่างระหว่างการยินยอมและการนอน?
เมื่องานเรียกใช้เมธอด Yield() งานจะกลับสู่สถานะพร้อม
เมื่องานเรียกใช้เมธอด sleep() งานจะกลับสู่สถานะรอ
29) ThreadPool คืออะไร
ThreadPool คือกลุ่มของเธรดที่นำเธรดจำนวนคงที่กลับมาใช้เพื่อดำเนินงานเฉพาะ
30) Synchronized keyword มีประโยชน์อย่างไร?
คำสำคัญที่ซิงโครไนซ์สามารถนำมาใช้กับวิธีการแบบคงที่หรือแบบไม่คงที่ก็ได้ การใช้ Synchronized เพียงหนึ่งเธรดเท่านั้นที่สามารถเข้าถึงวิธีการซิงโครไนซ์ได้ อย่างไรก็ตาม ในสถานการณ์ที่มีหลายเธรดที่กำลังพยายามเข้าถึงวิธีการเดียวกัน ในขณะนั้น เธรดอื่นต้องรอเธรดดำเนินการ อีกทั้งยังมีการล็อควัตถุเพื่อป้องกันสภาวะการแข่งขันอีกด้วย
public void synchronized method1(){} public void synchronized staticmethod1(){} public void myMethod(){ synchronized (this){ //synchronized keyword on block of code } }
31) คำหลักที่มีความผันผวนคืออะไร?
คำหลักที่เปลี่ยนแปลงได้คือตัวระบุซึ่งจะนำไปใช้กับตัวแปรเมื่อมีการประกาศ โดยจะบอกคอมไพเลอร์ว่าค่าของตัวแปรอาจเปลี่ยนแปลงได้ตลอดเวลา โดยที่โค้ดไม่ต้องดำเนินการใดๆ
32) อะไรคือความแตกต่างที่สำคัญระหว่าง notify และ notifyAll ใน Java?
เมธอด notify () ไม่มีวิธีในการเลือกเธรดใดโดยเฉพาะ นั่นเป็นสาเหตุว่าทำไมจึงมีประโยชน์เฉพาะเมื่อ While notifyAll() เดียวส่งการแจ้งเตือนไปยังเธรดทั้งหมด นอกจากนี้ยังช่วยให้พวกเขาแข่งขันเพื่อล็อคได้อีกด้วย นอกจากนี้ยังช่วยให้แน่ใจว่าอย่างน้อยหนึ่งเธรดจะดำเนินการต่อไป
33) พารามิเตอร์ JVM ใดที่ใช้ในการควบคุมขนาดสแต็กของเธรด
เพื่อควบคุมขนาดสแต็กของเธรดในพารามิเตอร์ Java Xss ถูกนำมาใช้
34) คุณสามารถเริ่มเธรดสองครั้งใน Java ได้หรือไม่?
ไม่ได้ เมื่อเริ่มเธรดแล้ว จะไม่สามารถเริ่มเป็นครั้งที่สองได้
35) จุดประสงค์ของการใช้วิธีการ Yield ของคลาสเธรดคืออะไร?
วิธีผลตอบแทนเป็นวิธีที่ง่ายที่สุดในการร้องขอเธรดปัจจุบันเพื่อสละ CPU เพื่อให้เธรดอื่น มันเป็นวิธีการคงที่และรับประกันว่าเธรดปัจจุบันจะสละ CPU แต่ไม่ได้บอกอะไรเกี่ยวกับเธรดอื่นที่ส่งผลกระทบต่อ CPU ด้วย
36) เมื่อใดที่เราสามารถพูดได้ว่าเธรดไม่ใช่กระบวนการแบบไลท์เวทใน java?
เธรดไม่ใช่กระบวนการที่มีน้ำหนักเบาเมื่อเธรดของกระบวนการเดียวกันถูกดำเนินการพร้อมกัน แม้ว่าหากเธรดของกระบวนการที่แตกต่างกันกำลังดำเนินการพร้อมกันในขณะนั้น เธรดจะกลายเป็นกระบวนการแบบเฮฟวี่เวท
37) เป็นไปได้ไหมที่จะซิงโครไนซ์ Constructor ของ Java Class?
ในฐานะ Java Standard ตัวสร้างไม่สามารถซิงโครไนซ์ได้เนื่องจากเธรดอื่นไม่สามารถมองเห็นออบเจ็กต์ก่อนที่กระบวนการสร้างเธรดจะเสร็จสิ้น ไม่จำเป็นต้องมีตัวสร้าง Java Objects ที่จะซิงโครไนซ์เนื่องจากมันจะล็อควัตถุที่กำลังสร้าง
38) ตัวแปรชั่วคราวคืออะไร?
ตัวแปรชั่วคราวคือตัวแปรที่ไม่สามารถทำให้เป็นอนุกรมได้ในระหว่างการทำให้เป็นอนุกรม มันถูกเตรียมใช้งานเป็นค่าเริ่มต้นในระหว่างการซีเรียลไลซ์
คำถามสัมภาษณ์เหล่านี้จะช่วยในวีว่าของคุณ (วาจา)
Hii
มันช่วยฉันได้จริงๆ ระหว่างการเตรียมการสัมภาษณ์
น่ายกย่องอย่างยิ่งที่ได้เขียนบทความนี้และให้ข้อมูลนี้
อดไม่ได้ที่จะ
5) สถานะของเธรดคืออะไร?
Runnable ไม่ใช่สถานะกำลังทำงาน มันพร้อมที่จะวิ่งแล้ว
อัปเดตแล้ว! ขอบคุณสำหรับการชี้ให้เห็นสิ่งนี้
1.สถานะที่รันได้จะถูกมองว่าเป็น bilayer ในระดับ OS
2. ภาษาการเขียนโปรแกรมเกือบทั้งหมดมองว่าเธรดนั้นสามารถรันได้หรือไม่
3.เธรดที่รันได้อาจอยู่ในสถานะ (พร้อมหรือกำลังทำงาน)
4. คุณสามารถมีสองเธรดในสถานะที่รันได้ แต่จะมีเพียงเธรดเดียวเท่านั้นที่จะอยู่ในสถานะ "กำลังทำงาน"
ในขณะที่เธรดที่สองอยู่ในสถานะ "กำลังทำงาน"