คำถามและคำตอบสัมภาษณ์แบบมัลติเธรด 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) ตัวแปรชั่วคราวคืออะไร?

ตัวแปรชั่วคราวคือตัวแปรที่ไม่สามารถทำให้เป็นอนุกรมได้ในระหว่างการทำให้เป็นอนุกรม มันถูกเตรียมใช้งานเป็นค่าเริ่มต้นในระหว่างการซีเรียลไลซ์

คำถามสัมภาษณ์เหล่านี้จะช่วยในวีว่าของคุณ (วาจา)

Share

4 คอมเมนต์

  1. รูปโพรไฟล์ การฝึกอบรมจาวา พูดว่า:

    Hii
    มันช่วยฉันได้จริงๆ ระหว่างการเตรียมการสัมภาษณ์
    น่ายกย่องอย่างยิ่งที่ได้เขียนบทความนี้และให้ข้อมูลนี้
    อดไม่ได้ที่จะ

  2. รูปโพรไฟล์ ชเวธศรี เวนกาเตช พูดว่า:

    5) สถานะของเธรดคืออะไร?
    Runnable ไม่ใช่สถานะกำลังทำงาน มันพร้อมที่จะวิ่งแล้ว

    1. รูปโพรไฟล์ ผู้ดูแลระบบ พูดว่า:

      อัปเดตแล้ว! ขอบคุณสำหรับการชี้ให้เห็นสิ่งนี้

    2. รูปโพรไฟล์ อมูดา อาเดโอลู บาดมุส พูดว่า:

      1.สถานะที่รันได้จะถูกมองว่าเป็น bilayer ในระดับ OS

      2. ภาษาการเขียนโปรแกรมเกือบทั้งหมดมองว่าเธรดนั้นสามารถรันได้หรือไม่

      3.เธรดที่รันได้อาจอยู่ในสถานะ (พร้อมหรือกำลังทำงาน)

      4. คุณสามารถมีสองเธรดในสถานะที่รันได้ แต่จะมีเพียงเธรดเดียวเท่านั้นที่จะอยู่ในสถานะ "กำลังทำงาน"
      ในขณะที่เธรดที่สองอยู่ในสถานะ "กำลังทำงาน"

เขียนความเห็น

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมาย *