Thread-Safe BlockingQueue ใน Java คืออะไร คุณควรใช้เมื่อใด แนบการดำเนินการ

เผยแพร่แล้ว: 2021-04-30
Threadsafe BlockingQueue ใน Java คืออะไรและคุณควรใช้เมื่อใด

จนถึงตอนนี้ ฉันได้เขียนบทความสองบทความเกี่ยวกับแนวคิดของ Producer Consumer เกี่ยวกับ Crunchify อันแรกเพื่ออธิบาย Java Semaphore และ Mutex และอันที่ 2 เพื่ออธิบายการอ่าน/เขียนพร้อมกัน

ในบทช่วยสอน Java นี้ เราจะพูดถึงแนวคิด Producer/Consumer เดียวกันเพื่ออธิบาย BlockingQueue in Java

ข้อดีของ Blocking Queue ใน Java คืออะไร?

java.util.Queue รองรับการดำเนินการที่รอให้คิวว่างเมื่อดึงข้อมูลองค์ประกอบ และรอให้พื้นที่ว่างในคิวเมื่อจัดเก็บองค์ประกอบ

java.util.BlockingQueue ใน java - Crunchify

เราจำเป็นต้องสร้างคลาส Java สี่คลาส:

  1. CrunchifyMessage.java เพื่อใส่และรับข้อความ
  2. CrunchifyBlockingProducer.java เพื่อใส่ข้อความลงในคิว
  3. CrunchifyBlockingConsumer.java เพื่อรับข้อความจากคิว
  4. CrunchifyBlockingMain.java เพื่อเริ่มการทดสอบ

การใช้งาน BlockingQueue นั้น thread-safe วิธีการเข้าคิวทั้งหมดมีลักษณะเป็นอะตอมและใช้การล็อกภายใน

มาเริ่มกันเลยกับการใช้งาน Thread-Safe BlockingQueue ใน Java

ขั้นตอนที่ 1

สร้างคลาส CrunchifyMessage.java นี่คือ Java Object อย่างง่าย

ขั้นตอนที่ 2

สร้างผู้ผลิต CrunchifyBlockingProducer.java ซึ่งสร้าง msg อย่างง่ายและใส่ลงในคิว

ขั้นตอนที่ 3

สร้างคลาส CrunchifyBlockingConsumer.java ซึ่งใช้ข้อความจากคิว

ขั้นตอนที่ 4

สร้างเมธอด CrunchifyBlockingMain.java อย่างง่าย ซึ่งรันการทดสอบ BlockingQueue เรียกใช้โปรแกรมนี้เพื่อตรวจสอบพฤติกรรมของ BlockingQueue

BlockingQueue ไม่ยอมรับองค์ประกอบที่เป็น โมฆะ การใช้งานจะส่ง NullPointerException เมื่อพยายาม เพิ่ม วาง หรือ เสนอ ค่า null

ค่า Null ถูกใช้เป็นค่า Sentinel เพื่อบ่งชี้ความล้มเหลวของการดำเนินการ สำรวจความคิดเห็น

ผลลัพธ์:

เมื่อใดที่เราควรใช้ java.util.concurrent.BlockingQueue

  • เมื่อคุณต้องการเค้นคำขอที่เข้ามาคุณควรใช้เหมือนกัน
  • ผู้ผลิตสามารถล้ำหน้าผู้บริโภคได้ไกลด้วยคิวที่ไม่จำกัด หากผู้บริโภคไม่ทันกับผู้ผลิต อาจทำให้เกิด OutOfMemoryError ในสถานการณ์เช่นนี้ อาจเป็นการดีกว่าที่จะส่งสัญญาณให้ผู้ผลิตทราบว่าคิวเต็ม และเลิกล้มอย่างรวดเร็วหากเกิดความล้มเหลว
    • กล่าวอีกนัยหนึ่ง: ผู้ผลิตถูกควบคุมอย่างเป็นธรรมชาติ
  • ปกติใช้ Blocking Queue ในแอพพลิเคชั่นพร้อมกัน
  • มีการใช้งานที่ถูกต้องและปลอดภัยสำหรับเธรด
  • การใช้หน่วยความจำก็ควรถูกจำกัดเช่นกัน