Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง ArrayBlockingQueue และ LinkedBlockingQueue

ArrayBlockingQueue vs LinkedBlockingQueue

ทั้งคู่ implement BlockingQueue interface เก็บข้อมูลแบบ FIFO Insertion ที่ tail, Removal ที่ head

ตารางเปรียบเทียบ

KeyArrayBlockingQueueLinkedBlockingQueue
Backing StructureArrayLinked List
Boundedใช่ (fixed capacity)ไม่ (unbounded โดย default)
Throughputต่ำกว่าสูงกว่า (linked queues)
LockingSingle-lock double conditionputLock (insert) + takeLock (remove) แยกกัน

รายละเอียด

  • ArrayBlockingQueue: ใช้ array คงที่ เหมาะเมื่อรู้ capacity ล่วงหน้า ต้องการ bounded buffer
  • LinkedBlockingQueue: ใช้ linked list ขยายได้ ไม่มีขีดจำกัด (เว้นแต่ระบุ) Throughput สูงกว่าเพราะ lock แยกสำหรับ put/take

สรุป

เลือก ArrayBlockingQueue เมื่อต้องการ bounded และ capacity คงที่ เลือก LinkedBlockingQueue เมื่อต้องการ unbounded หรือ throughput สูง