บทความนี้ช่วยให้คุณเชี่ยวชาญความรู้พื้นฐานของ Java Multithreading เพื่อให้สอดคล้องกับปัญหาที่คุณพบในอนาคต เนื้อหาเฉพาะมีดังนี้
1. คำถามสัมภาษณ์แบบมัลติเธรด Java
1. ความแตกต่างระหว่างกระบวนการและเธรดคืออะไร?
กระบวนการเป็นสภาพแวดล้อมที่ใช้งานด้วยตนเองซึ่งถือได้ว่าเป็นโปรแกรมหรือแอปพลิเคชัน เธรดเป็นงานที่ดำเนินการในกระบวนการ สภาพแวดล้อม Java Runtime เป็นกระบวนการเดียวที่มีคลาสและโปรแกรมที่แตกต่างกัน เธรดสามารถเรียกได้ว่ากระบวนการที่มีน้ำหนักเบา เธรดต้องการทรัพยากรน้อยลงในการสร้างและอาศัยอยู่ในกระบวนการและสามารถแบ่งปันทรัพยากรในกระบวนการ
2. ประโยชน์ของการเขียนโปรแกรมแบบมัลติเธรดคืออะไร?
ในโปรแกรมมัลติเธรดหลายเธรดจะถูกดำเนินการพร้อมกันเพื่อปรับปรุงประสิทธิภาพของโปรแกรมและ CPU จะไม่เข้าสู่สถานะที่ไม่ได้ใช้งานเนื่องจากเธรดบางอย่างจำเป็นต้องรอทรัพยากร หลายเธรดแบ่งปันหน่วยความจำฮีปดังนั้นการสร้างหลายเธรดเพื่อทำงานบางอย่างดีกว่าการสร้างหลายกระบวนการ ตัวอย่างเช่น Servlets ดีกว่า CGI เนื่องจาก Servlets รองรับ multithreading ในขณะที่ CGI ไม่ได้
3. ความแตกต่างระหว่างเธรดผู้ใช้และเธรด daemon คืออะไร?
เมื่อเราสร้างเธรดในโปรแกรม Java จะเรียกว่าเธรดผู้ใช้ เธรด daemon เป็นเธรดที่ดำเนินการในพื้นหลังและไม่ปิดกั้น JVM ที่สิ้นสุด เมื่อไม่มีเธรดผู้ใช้กำลังทำงาน JVM จะปิดโปรแกรมและออก เธรดลูกที่สร้างขึ้นโดยด้ายดุลยังคงเป็นด้ายดุล
4. เราจะสร้างเธรดได้อย่างไร?
มีสองวิธีในการสร้างเธรด: หนึ่งคือการใช้อินเทอร์เฟซ Runnable จากนั้นส่งผ่านไปยังตัวสร้างเธรดและสร้างวัตถุเธรด อื่น ๆ คือการสืบทอดคลาสเธรดโดยตรง สำหรับข้อมูลเพิ่มเติมคุณสามารถอ่านบทความนี้เกี่ยวกับวิธีการสร้างเธรดใน Java
5. วงจรชีวิตที่แตกต่างกันคืออะไร?
เมื่อเราสร้างเธรดใหม่ในโปรแกรม Java สถานะของมันจะใหม่ เมื่อเราเรียกวิธีการเริ่มต้น () ของเธรดสถานะจะถูกเปลี่ยนเป็น Runnable ตัวกำหนดเวลาเธรดจัดสรรเวลา CPU ให้กับเธรดในพูลเธรดที่เรียกใช้และเปลี่ยนสถานะเป็นการทำงาน สถานะเธรดอื่น ๆ รวมถึงการรอการบล็อกและตาย อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับชีวิตเธรด
6. ฉันสามารถเรียกวิธีการเรียกใช้ () ของคลาสเธรดโดยตรงได้หรือไม่?
แน่นอน แต่ถ้าเราเรียกวิธีการ RUN () ของเธรดมันจะทำตัวเหมือนวิธีปกติ ในการเรียกใช้รหัสของเราในเธรดใหม่จะต้องใช้เมธอด thread.start ()
7. จะหยุดเธรดที่ทำงานชั่วคราวเป็นระยะเวลาหนึ่งได้อย่างไร?
เราสามารถใช้วิธีการนอนหลับ () ของคลาสเธรดเพื่อหยุดเธรดชั่วคราวเป็นระยะเวลาหนึ่ง ควรสังเกตว่าสิ่งนี้ไม่ได้ทำให้เธรดยุติ เมื่อเธรดถูกปลุกจากการจำศีลแล้วสถานะของเธรดจะถูกเปลี่ยนเป็น Runnable และตามการกำหนดเวลาเธรดมันจะถูกดำเนินการ
8. คุณเข้าใจลำดับความสำคัญของด้ายอย่างไร?
แต่ละเธรดมีลำดับความสำคัญ โดยทั่วไปแล้วเธรดที่มีลำดับความสำคัญสูงจะมีความสำคัญเมื่อทำงาน แต่ขึ้นอยู่กับการใช้งานการกำหนดตารางเวลาของเธรดซึ่งเกี่ยวข้องกับระบบปฏิบัติการ (ขึ้นอยู่กับระบบปฏิบัติการ) เราสามารถกำหนดลำดับความสำคัญของเธรดได้ แต่สิ่งนี้ไม่รับประกันว่าเธรดที่มีลำดับความสำคัญสูงจะดำเนินการต่อหน้าเธรดที่มีลำดับความสำคัญต่ำ ลำดับความสำคัญของเธรดคือตัวแปร int (จาก 1-10), 1 หมายถึงลำดับความสำคัญต่ำสุดและ 10 แสดงถึงลำดับความสำคัญสูงสุด
9. ตารางเวลาและการหั่นเวลาคืออะไร?
ตัวจัดตารางเวลาเป็นบริการระบบปฏิบัติการที่รับผิดชอบในการจัดสรรเวลา CPU ให้กับเธรดในสถานะที่ทำงานได้ เมื่อเราสร้างเธรดและเริ่มต้นการดำเนินการของมันขึ้นอยู่กับการใช้งานของตัวกำหนดตารางเวลาเธรด เวลาการให้ข้อมูลหมายถึงกระบวนการจัดสรรเวลา CPU ที่มีอยู่ให้กับเธรด runnable ที่มีอยู่ เวลา CPU ที่จัดสรรสามารถขึ้นอยู่กับลำดับความสำคัญของเธรดหรือเวลารอเธรด การจัดตารางเธรดไม่ได้ถูกควบคุมโดยเครื่องเสมือน Java ดังนั้นจึงเป็นการดีกว่าที่จะควบคุมโดยแอปพลิเคชัน (นั่นคืออย่าปล่อยให้โปรแกรมของคุณขึ้นอยู่กับลำดับความสำคัญของเธรด)
10. ในมัลติเธรดการสลับบริบทคืออะไร?
การสลับบริบทเป็นกระบวนการจัดเก็บและกู้คืนสถานะ CPU ซึ่งช่วยให้การดำเนินการเธรดเพื่อดำเนินการต่อจากจุดขัดจังหวะ การสลับบริบทเป็นคุณสมบัติพื้นฐานของระบบปฏิบัติการแบบหลายงานและสภาพแวดล้อมแบบมัลติเธรด
11. คุณจะแน่ใจได้อย่างไรว่าเธรดที่เมธอดหลัก () อยู่เป็นเธรดสุดท้ายที่สิ้นสุดในโปรแกรม Java?
เราสามารถใช้วิธีการร่วม () ของคลาสเธรดเพื่อให้แน่ใจว่าเธรดทั้งหมดที่สร้างโดยโปรแกรมสิ้นสุดก่อนที่วิธีการหลัก () จะออก นี่คือบทความเกี่ยวกับวิธีการร่วม () ของคลาสเธรด
12. เธรดสื่อสารได้อย่างไร?
เมื่อสามารถแบ่งปันทรัพยากรระหว่างเธรดการสื่อสารระหว่างเธรดเป็นวิธีสำคัญในการประสานงานพวกเขา วิธีการรอ ()/แจ้ง ()/notifyall () ในคลาสวัตถุสามารถใช้ในการสื่อสารระหว่างเธรดเกี่ยวกับสถานะของล็อคเกี่ยวกับทรัพยากร คลิกที่นี่เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับเธรดรอแจ้งและแจ้งเตือน
13. เหตุใดวิธีการสื่อสารเธรดจึงรอ (), แจ้ง () และแจ้งเตือน () ที่กำหนดไว้ในคลาสวัตถุ?
แต่ละวัตถุใน Java มีล็อค (จอภาพซึ่งสามารถเป็นจอภาพ) และรอ (), แจ้ง () และวิธีการอื่น ๆ ที่ใช้เพื่อรอการล็อคของวัตถุหรือแจ้งวัตถุเธรดอื่น ๆ ที่จะพร้อมใช้งาน ไม่มีล็อคและซิงโครไนเซอร์สำหรับวัตถุใด ๆ ที่จะใช้ในเธรด Java นี่คือเหตุผลที่วิธีการเหล่านี้เป็นส่วนหนึ่งของคลาสวัตถุเพื่อให้ทุกคลาสใน Java มีวิธีการพื้นฐานสำหรับการสื่อสารระหว่างเธรด
14. ทำไมต้องรอ (), แจ้ง () และแจ้งเตือน () เรียกใช้ในวิธีการซิงโครไนซ์หรือบล็อกการซิงโครไนซ์?
เมื่อเธรดจำเป็นต้องเรียกวิธีการรอ () ของวัตถุเธรดจะต้องมีล็อคของวัตถุ จากนั้นจะปล่อยล็อคของวัตถุและเข้าสู่สถานะการรอจนกว่าเธรดอื่นจะเรียกวิธีการแจ้งเตือน () บนวัตถุ ในทำนองเดียวกันเมื่อเธรดจำเป็นต้องเรียกใช้วิธีการแจ้งเตือนของวัตถุ () มันจะปล่อยล็อคของวัตถุเพื่อให้เธรดอื่น ๆ ที่รอรับล็อคของวัตถุ เนื่องจากวิธีการทั้งหมดเหล่านี้จำเป็นต้องมีเธรดที่จะยึดล็อคของวัตถุจึงสามารถนำไปใช้ได้ผ่านการซิงโครไนซ์เท่านั้นดังนั้นจึงสามารถเรียกได้ในวิธีการซิงโครไนซ์หรือบล็อกซิงโครไนซ์เท่านั้น
15. เหตุใดการนอนหลับ () และวิธีการให้ () ของคลาสเธรดแบบคงที่?
วิธีการนอนหลับ () และอัตราผลตอบแทน () ของคลาสเธรดจะทำงานบนเธรดที่ดำเนินการในปัจจุบัน ดังนั้นจึงไม่สมเหตุสมผลที่จะเรียกวิธีการเหล่านี้ในหัวข้ออื่น ๆ ที่อยู่ในสถานะรอ นั่นเป็นเหตุผลว่าทำไมวิธีการเหล่านี้จึงคงที่ พวกเขาสามารถทำงานในเธรดการดำเนินการในปัจจุบันและหลีกเลี่ยงความเชื่อที่ผิดพลาดของโปรแกรมเมอร์ว่าวิธีการเหล่านี้สามารถเรียกได้ในเธรดที่ไม่รันอื่น ๆ
16. จะรับรองความปลอดภัยของด้ายได้อย่างไร?
มีหลายวิธีในการรับรองความปลอดภัยของเธรดใน Java - การซิงโครไนซ์ใช้คลาสอะตอมพร้อมกันใช้งานล็อคพร้อมกันใช้คำหลักที่ผันผวนใช้คลาสคงที่และคลาสที่ปลอดภัยของเธรด คุณสามารถเรียนรู้เพิ่มเติมในการสอนความปลอดภัยด้าย
17. คำหลักที่ผันผวนใน Java คืออะไร?
เมื่อเราใช้คำหลักที่ผันผวนเพื่อแก้ไขตัวแปรเธรดจะอ่านตัวแปรโดยตรงและไม่แคช สิ่งนี้ทำให้มั่นใจได้ว่าตัวแปรที่อ่านโดยเธรดมีความสอดคล้องกันในหน่วยความจำ
18. ตัวเลือกใดที่ดีกว่าวิธีการซิงโครไนซ์หรือบล็อกการซิงโครไนซ์?
บล็อกแบบซิงโครนัสเป็นตัวเลือกที่ดีกว่าเพราะจะไม่ล็อควัตถุทั้งหมด (และแน่นอนคุณสามารถปล่อยให้มันล็อควัตถุทั้งหมด) วิธีการซิงโครไนซ์ล็อควัตถุทั้งหมดแม้ว่าจะมีบล็อกซิงโครไนซ์ที่ไม่เกี่ยวข้องหลายครั้งในชั้นเรียนซึ่งมักจะทำให้พวกเขาหยุดการดำเนินการและจำเป็นต้องรอเพื่อรับการล็อคบนวัตถุ
19. จะสร้างด้ายเป็นอย่างไร?
ใช้เมธอด setdaemon (true) ของคลาสเธรดเป็นวิธี setdaemon (true) เพื่อตั้งค่าเธรดเป็นเธรด daemon ควรสังเกตว่าวิธีนี้จะต้องมีการเรียกใช้ก่อนที่จะเรียกวิธีการเริ่มต้น () มิฉะนั้นจะมีการโยน unglemalthreadstateException
20. Threadlocal คืออะไร?
ThreadLocal ใช้เพื่อสร้างตัวแปรท้องถิ่นสำหรับเธรด เรารู้ว่าเธรดทั้งหมดของวัตถุจะแบ่งปันตัวแปรทั่วโลกดังนั้นตัวแปรเหล่านี้ไม่ปลอดภัยกับเธรดและเราสามารถใช้เทคนิคการซิงโครไนซ์ แต่เมื่อเราไม่ต้องการใช้การซิงโครไนซ์เราสามารถเลือกตัวแปร ThreadLocal
แต่ละเธรดจะมีตัวแปรเธรดของตัวเองซึ่งสามารถใช้วิธี GET ()/set () เพื่อรับค่าเริ่มต้นหรือเปลี่ยนค่าของพวกเขาภายใน อินสแตนซ์ Threadlocal มักจะต้องการให้พวกเขาเชื่อมโยงกับสถานะเธรดเป็นคุณลักษณะคงที่ส่วนตัว ในบทความนี้คุณสามารถดูโปรแกรมเล็ก ๆ เกี่ยวกับ ThreadLocal
21. กลุ่มเธรดคืออะไร? ทำไมจึงไม่แนะนำ?
ThreadGroup เป็นคลาสที่มีวัตถุประสงค์เพื่อให้ข้อมูลเกี่ยวกับกลุ่มเธรด
Threadgroup API ค่อนข้างอ่อนแอและไม่ได้มีคุณสมบัติมากกว่าเธรด มันมีสองฟังก์ชั่นหลัก: หนึ่งคือการได้รับรายการของเธรดที่ใช้งานอยู่ในกลุ่มเธรด อีกอย่างคือการตั้งค่าตัวจัดการข้อยกเว้นที่ไม่ได้รับการยกเว้นสำหรับเธรด อย่างไรก็ตามใน Java 1.5 คลาสเธรดยังได้เพิ่มเมธอด setuncaughtexceptionhandler (uncaughtexceptionhandler eh) ดังนั้น threadgroup จะล้าสมัยและไม่แนะนำให้ใช้ต่อไป
T1.SetuncaughtexceptionHandler (ใหม่ uncaughtexceptionhandler () {@Override โมฆะสาธารณะ uncaughtexception (เธรด t, throwable e) {system.out.println ("เกิดข้อยกเว้น:"+e.getMessage ());}}); 22. การถ่ายโอนข้อมูลด้าย Java คืออะไรและจะได้อย่างไร?
Thread Dump เป็นรายการของเธรดที่ใช้งาน JVM ที่มีประโยชน์มากสำหรับการวิเคราะห์คอขวดของระบบและการหยุดชะงัก มีหลายวิธีในการรับการถ่ายโอนข้อมูลเธรด - การใช้ Profiler, Kill -3 Command, JStack Tool, ฯลฯ ฉันชอบเครื่องมือ JStack เพราะใช้งานง่ายและมาพร้อมกับ JDK เนื่องจากเป็นเครื่องมือที่ใช้เทอร์มินัลเราจึงสามารถเขียนสคริปต์บางอย่างเพื่อสร้างการถ่ายโอนข้อมูลด้ายสำหรับการวิเคราะห์ได้ทันเวลา อ่านเอกสารนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างการถ่ายโอนข้อมูลเธรด
23. การหยุดชะงักคืออะไร? จะวิเคราะห์และหลีกเลี่ยงการหยุดชะงักได้อย่างไร?
การหยุดชะงักหมายถึงสถานการณ์ที่มากกว่าสองเธรดถูกบล็อกตลอดไป สถานการณ์นี้ต้องการอย่างน้อยสองเธรดและมากกว่าสองทรัพยากร
ในการวิเคราะห์ Deadlocks เราจำเป็นต้องดูการถ่ายโอนข้อมูลเธรดของแอปพลิเคชัน Java เราจำเป็นต้องค้นหาหัวข้อเหล่านั้นที่มีสถานะบล็อกและทรัพยากรที่พวกเขารอคอย แต่ละทรัพยากรมี ID ที่ไม่ซ้ำกัน การใช้ ID นี้เราสามารถค้นหาว่าเธรดใดที่มีการล็อควัตถุอยู่แล้ว
การหลีกเลี่ยงการล็อคแบบซ้อนกันโดยใช้ล็อคเฉพาะที่จำเป็นและหลีกเลี่ยงการรอคอยอย่างไม่ จำกัด เป็นวิธีปกติในการหลีกเลี่ยงการหยุดชะงักอ่านบทความนี้เพื่อเรียนรู้วิธีการวิเคราะห์การหยุดชะงัก
24. คลาส Java Timer คืออะไร? จะสร้างงานที่มีช่วงเวลาที่กำหนดได้อย่างไร?
java.util.timer เป็นคลาสเครื่องมือที่สามารถใช้ในการกำหนดเวลาเธรดเพื่อดำเนินการในช่วงเวลาหนึ่งในอนาคต คลาสจับเวลาสามารถจัดได้โดยการกำหนดเวลางานครั้งเดียวหรืองานเป็นระยะ
java.util.timertask เป็นคลาสนามธรรมที่ใช้อินเทอร์เฟซที่รันได้ เราจำเป็นต้องสืบทอดคลาสนี้เพื่อสร้างงานที่กำหนดเวลาของเราเองและใช้ตัวจับเวลาเพื่อจัดการการดำเนินการ
25. พูลเธรดคืออะไร? จะสร้างพูลเธรด Java ได้อย่างไร?
พูลเธรดจัดการชุดเธรดคนงานและยังมีคิวสำหรับการวางงานที่รอการดำเนินการ
java.util.concurrent.executors ให้การดำเนินการของ java.util.concurrent.executor อินเตอร์เฟสสำหรับการสร้างพูลเธรด ตัวอย่างเธรดพูลแสดงวิธีการสร้างและใช้พูลเธรดหรืออ่านตัวอย่าง ScheduleDTHREADPoolexecutor เพื่อเรียนรู้วิธีการสร้างงานเป็นระยะ
2. คำถามสัมภาษณ์ Java พร้อมกัน
1. การทำงานของอะตอมคืออะไร? มีคลาสอะตอมอะไรใน Java พร้อมกัน API?
การดำเนินการอะตอมหมายถึงหน่วยงานการดำเนินงานที่ไม่ได้รับผลกระทบจากการดำเนินการอื่น ๆ การดำเนินการอะตอมเป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงความไม่สอดคล้องกันของข้อมูลในสภาพแวดล้อมแบบมัลติเธรด
Int ++ ไม่ใช่การทำงานของอะตอมดังนั้นเมื่อเธรดอ่านค่าและเพิ่ม 1 เธรดอื่นอาจอ่านค่าก่อนหน้าซึ่งจะเพิ่มข้อผิดพลาด
เพื่อแก้ปัญหานี้มีความจำเป็นเพื่อให้แน่ใจว่าการเพิ่มการดำเนินการเป็นอะตอมและเราสามารถใช้เทคโนโลยีการซิงโครไนซ์เพื่อทำสิ่งนี้ก่อน JDK1.5 ถึง JDK1.5 Java.util.concurrent.Atomic Package ให้คลาสการโหลดแบบ int และประเภทยาวซึ่งสามารถตรวจสอบให้แน่ใจว่าพวกเขาเป็นอะตอมสำหรับการดำเนินงานของพวกเขาโดยอัตโนมัติและไม่จำเป็นต้องมีการซิงโครไนซ์
2. อินเตอร์เฟสล็อคใน API พร้อมกันของ Java คืออะไร? ข้อดีของการเปรียบเทียบการซิงโครไนซ์คืออะไร?
อินเตอร์เฟสล็อคให้การดำเนินการล็อคที่ปรับขนาดได้มากกว่าวิธีการซิงโครไนซ์และบล็อกการซิงโครไนซ์ พวกเขาอนุญาตให้มีโครงสร้างที่ยืดหยุ่นมากขึ้นสามารถมีคุณสมบัติที่แตกต่างกันโดยสิ้นเชิงและสามารถรองรับวัตถุที่มีเงื่อนไขของคลาสที่เกี่ยวข้องหลายชั้น
ข้อดีของมันคือ:
มันสามารถทำให้ล็อคยุติธรรมมากขึ้นเพื่อให้เธรดตอบสนองต่อการขัดจังหวะขณะรอล็อคเพื่อให้เธรดสามารถลองรับการล็อคและกลับมาทันทีเมื่อไม่สามารถรับล็อคหรือรอเป็นระยะเวลาหนึ่งซึ่งสามารถรับและปล่อยในคำสั่งซื้อต่าง ๆ ในช่วงต่าง ๆ
3. เฟรมเวิร์กผู้บริหารคืออะไร?
เฟรมเวิร์กผู้บริหารได้รับการแนะนำใน Java 5 ด้วย Java.util.concurrent.executor Interface Framework ผู้ดำเนินการเป็นกรอบการทำงานที่ดำเนินการงานแบบอะซิงโครนัสที่ดำเนินการตามนโยบายกำหนดเวลาดำเนินการและควบคุมตามชุดของนโยบาย
เธรดการสร้างแบบไม่ จำกัด อาจทำให้หน่วยความจำแอปพลิเคชันล้น ดังนั้นการสร้างพูลเธรดจึงเป็นทางออกที่ดีกว่าเนื่องจากจำนวนเธรดสามารถ จำกัด ได้และจำนวนเธรดสามารถนำกลับมาใช้ใหม่และนำกลับมาใช้ใหม่ได้ การใช้เฟรมเวิร์ก Executors สามารถสร้างพูลเธรดได้อย่างง่ายดาย อ่านบทความนี้เพื่อเรียนรู้วิธีการใช้เฟรมเวิร์กผู้ดำเนินการเพื่อสร้างพูลเธรด
4. คิวการบล็อกคืออะไร? วิธีการใช้โมเดลผู้ผลิต-ผู้บริโภคโดยใช้คิวการปิดกั้น?
คุณลักษณะของ java.util.concurrent.blockingqueue คือ: เมื่อคิวว่างเปล่าการดำเนินการของการรับหรือลบองค์ประกอบจากคิวจะถูกบล็อกหรือเมื่อคิวเต็มการดำเนินการขององค์ประกอบการเพิ่มเข้าคิวจะถูกบล็อก
คิวการปิดกั้นไม่ยอมรับค่า NULL และเมื่อคุณพยายามเพิ่มค่า NULL ลงในคิวมันจะพุ่ง nullpointerexception
การใช้คิวการปิดกั้นคือความปลอดภัยของเธรดและวิธีการสืบค้นทั้งหมดเป็นอะตอมและใช้ล็อคภายในหรือรูปแบบอื่น ๆ ของการควบคุมพร้อมกัน
อินเทอร์เฟซ BlockingQueue เป็นส่วนหนึ่งของกรอบคอลเลกชัน Java ซึ่งส่วนใหญ่ใช้ในการใช้ปัญหาผู้ผลิต-ผู้บริโภค
5. สิ่งที่เรียกได้และอนาคตคืออะไร?
Java 5 แนะนำ java.util.concurrent.callable อินเตอร์เฟสในแพ็คเกจพร้อมกัน มันคล้ายกับอินเทอร์เฟซ Runnable แต่สามารถส่งคืนวัตถุหรือโยนข้อยกเว้นได้
อินเตอร์เฟส callable ใช้ยาชื่อสามัญเพื่อกำหนดประเภทการส่งคืน คลาส Executors มีวิธีการที่มีประโยชน์บางอย่างในการดำเนินงานภายใน callable ในพูลเธรด เนื่องจากงานที่เรียกได้นั้นขนานกันเราจึงต้องรอผลลัพธ์ที่ส่งกลับ java.util.concurrent.future วัตถุแก้ปัญหานี้สำหรับเรา หลังจากพูลเธรดส่งงานเรียกได้วัตถุในอนาคตจะถูกส่งคืน การใช้มันเราสามารถทราบสถานะของงานเรียกได้และรับผลการดำเนินการที่ส่งคืนโดย callable อนาคตมีวิธีการรับ () ที่ช่วยให้เราสามารถรอให้ callable สิ้นสุดและได้รับผลการดำเนินการ
6. FutureTask คืออะไร?
FutureTask เป็นการใช้งานพื้นฐานของอนาคตเราสามารถใช้กับผู้บริหารเพื่อจัดการงานอะซิงโครนัส โดยปกติแล้วเราไม่จำเป็นต้องใช้คลาส FutureTask มันจะมีประโยชน์มากเมื่อเราวางแผนที่จะเขียนวิธีการบางอย่างของอินเทอร์เฟซในอนาคตและรักษาการใช้งานพื้นฐานดั้งเดิม เราสามารถสืบทอดจากมันและเขียนวิธีที่เราต้องการใหม่
7. การดำเนินการของคอนเทนเนอร์พร้อมกันคืออะไร?
คลาสคอลเลกชัน Java ทั้งหมดล้มเหลวอย่างรวดเร็วซึ่งหมายความว่าเมื่อชุดเปลี่ยนไปและเธรดจะใช้ตัววนซ้ำเพื่อสำรวจชุดวิธีถัดไปของตัววนซ้ำ () จะทำให้เกิดข้อยกเว้นพร้อมกัน Exception
คอนเทนเนอร์ที่เกิดขึ้นพร้อมกันสนับสนุนการอัปเดตการสำรวจและการตรวจสอบพร้อมกันพร้อมกัน
คลาสหลัก ได้แก่ พร้อมกัน choperonwritearraylist และ copyonwritearrayset อ่านบทความนี้เพื่อเรียนรู้วิธีหลีกเลี่ยงการรับรู้พร้อมกัน Exception
8. คลาสผู้บริหารคืออะไร?
ผู้ดำเนินการให้วิธีการเครื่องมือสำหรับผู้ดำเนินการ, ExecutorService, ScheduleDexecutorService, คลาส ThreadFactory และ Callable
ผู้บริหารสามารถใช้เพื่อสร้างพูลเธรดได้อย่างสะดวก
ในความเป็นจริงมีคำถามสัมภาษณ์ Java ขั้นพื้นฐานอีกมากมายและคุณสามารถจัดระเบียบได้อย่างเป็นระบบ
ฉันหวังว่าทุกคนจะประสบความสำเร็จในการสัมภาษณ์!