เดียวกัน:
1. LinkedBlockingQueue และ ArrayBlockingQueue ทั้งคู่ใช้อินเตอร์เฟส BlockingQueue;
2. LinkedBlockingQueue และ arrayblockingqueue เป็นทั้งคิวที่บล็อกได้
reentrantlock และเงื่อนไขถูกนำมาใช้ภายในเพื่อให้แน่ใจว่าการซิงโครไนซ์ของการผลิตและการบริโภค;
เมื่อคิวว่างเปล่าเธรดผู้บริโภคจะถูกบล็อก เมื่อคิวเต็มเธรดผู้ผลิตจะถูกบล็อก
ใช้วิธีการเงื่อนไขเพื่อซิงโครไนซ์และสื่อสาร: รอ () และสัญญาณ ()
แตกต่าง:
1. ดังที่เห็นได้จากภาพด้านบนกลไกการล็อคของพวกเขาแตกต่างกัน
ล็อคใน LinkedBlockingQueue ถูกแยกออก, ล็อคล็อคของผู้ผลิตและ Lock Takelock ของผู้บริโภค
ผู้ผลิตและผู้บริโภค Arrayblockingqueue ใช้ล็อคเดียวกัน
2. กลไกการใช้งานพื้นฐานของพวกเขาก็แตกต่างกันเช่นกัน
LinkedBlockingQueue ดูแลโครงสร้างรายการที่เชื่อมโยงภายใน
ในระหว่างการผลิตและการบริโภคจะต้องสร้างวัตถุโหนดสำหรับการแทรกหรือลบ ในระบบที่มีข้อมูลจำนวนมากความดันต่อ GC จะยิ่งใหญ่กว่า
arrayblockingqueue ดูแลอาร์เรย์ภายใน
ในระหว่างการผลิตและการบริโภควัตถุการแจงนับจะถูกแทรกหรือลบโดยตรงและไม่มีการสร้างหรือทำลายวัตถุเพิ่มเติม
3. ความแตกต่างในการก่อสร้าง
LinkedBlockingQueue มีขนาดความจุเริ่มต้น: Integer.max_value แน่นอนคุณสามารถผ่านขนาดความจุที่ระบุได้
เมื่อเริ่มต้น arrayblockingqueue ค่าความจุจะต้องผ่าน
คุณสามารถรู้ได้โดยดูที่วิธีการก่อสร้างที่ได้รับจากมัน
4. ดำเนินการวิธี Clear ()
เมื่อ LinkedBlockingQueue ดำเนินการวิธีการที่ชัดเจนจะมีการเพิ่มล็อคสองตัว
5. สถิติจำนวนองค์ประกอบ
วัตถุอะตอมมิคอินเทอร์ใช้ใน LinkedBlockingQueue เพื่อนับจำนวนองค์ประกอบ
arrayblockingqueue ใช้ประเภท int เพื่อนับองค์ประกอบ