เราทุกคนรู้ว่าใน Java มีสองวิธีในการบรรลุหลายเธรดหนึ่งคือการดำเนินการต่อคลาสเธรดต่อไปและอีกวิธีหนึ่งคือการใช้อินเทอร์เฟซที่วิ่งได้
1. ความแตกต่างระหว่างกระบวนการและเธรดคืออะไร?
กระบวนการนี้เป็นแอปพลิเคชันการดำเนินการและเธรดเป็นลำดับการดำเนินการภายในกระบวนการ กระบวนการหนึ่งสามารถมีหลายเธรด เธรดเรียกอีกอย่างว่ากระบวนการที่มีน้ำหนักเบา
2. มีวิธีการสร้างเธรดที่แตกต่างกันกี่วิธี? คุณชอบอันไหน? ทำไม
มีสามวิธีในการสร้างเธรด:
(1) สืบทอดคลาสเธรด (2) การใช้งานอินเตอร์เฟส Runnable (3) แอปพลิเคชันสามารถใช้เฟรมเวิร์ก Executor เพื่อสร้างพูลเธรดเพื่อให้ได้อินเทอร์เฟซ Runnable ในการออกแบบแอปพลิเคชันที่สืบทอดวัตถุอื่น ๆ สิ่งนี้ต้องการการสืบทอดมากขึ้น (และ Java ไม่สนับสนุนการสืบทอดมากขึ้น) และสามารถบรรลุอินเทอร์เฟซเท่านั้น ในเวลาเดียวกันพูลเธรดก็มีประสิทธิภาพและง่ายต่อการใช้งานและใช้งานได้ง่าย
3. คำอธิบายสรุปของการใช้เธรดหลายอย่าง
ในระหว่างกระบวนการดำเนินการเธรดสามารถอยู่ในสถานะต่อไปนี้:
Runnable: เธรดพร้อมที่จะเรียกใช้และอาจไม่สามารถดำเนินการได้ทันที
Running: กระบวนการกำลังดำเนินการรหัสของเธรด
การรอคอย: เธรดอยู่ในสถานะของการอุดตันรอการรักษาภายนอก
การนอนหลับ: ด้ายถูกบังคับให้นอนหลับ
บล็อก I/O (บล็อกบน I/O): กำลังรอการดำเนินการ I/O
บล็อกการซิงโครไนซ์: รอล็อค
ความตาย: เธรดถูกดำเนินการ
4. ความแตกต่างระหว่างวิธีการซิงโครไนซ์กับบล็อกรหัสซิงโครนัสคืออะไร?
ในภาษา Java แต่ละวัตถุมีล็อค เธรดสามารถใช้คำหลักที่ซิงโครไนซ์เพื่อรับล็อคบนวัตถุ คำหลักที่ซิงโครไนซ์สามารถนำไปใช้กับระดับวิธี (ล็อคเม็ดหยาบ) หรือระดับบล็อกรหัส (ล็อคอนุภาคขนาดเล็ก -ขนาด)
5. ในจอภาพ (จอภาพ) การซิงโครไนซ์เธรดจะทำอย่างไร? โปรแกรมควรซิงโครไนซ์ระดับใด
จอภาพและล็อคใช้ในเครื่องเสมือน Java จอภาพตรวจสอบบล็อกรหัสแบบซิงโครนัสเพื่อให้แน่ใจว่ามีเพียงเธรดเดียวเท่านั้นที่จะเรียกใช้บล็อกรหัสแบบซิงโครนัสในแต่ละครั้ง แต่ละจอภาพเชื่อมโยงกับการอ้างอิงวัตถุ เธรดไม่อนุญาตให้ใช้รหัสการซิงโครไนซ์การดำเนินการก่อนที่จะได้รับการล็อค
6. การหยุดชะงักคืออะไร?
กระบวนการทั้งสองกำลังรอให้อีกฝ่ายดำเนินการก่อนที่พวกเขาจะสามารถดำเนินการต่อได้ เป็นผลให้ทั้งสองกระบวนการอยู่ในการรอไม่ จำกัด
7. วิธีการตรวจสอบให้แน่ใจว่าเธรด n สามารถเข้าถึงทรัพยากร n ในขณะที่ไม่ได้นำไปสู่การล็อคที่ตายแล้ว?
เมื่อใช้หลายเธรดวิธีที่ง่ายมากในการหลีกเลี่ยงการล็อคที่ตายแล้วคือการระบุลำดับของการรับล็อคและเธรดที่ถูกบังคับให้รับล็อคตามลำดับที่ระบุ ดังนั้นหากเธรดทั้งหมดถูกล็อคและปล่อยออกมาในลำดับเดียวกันจะไม่มีการล็อคตาย