วิธีการใช้งาน BlockingQueue Interface ใน Java



บทความนี้จะให้ความรู้โดยละเอียดและครอบคลุมเกี่ยวกับวิธีใช้อินเทอร์เฟซ BlockingQueue ใน Java

คิวเป็นสิ่งสำคัญของภาษาโปรแกรมใด ๆ โดยเฉพาะอย่างยิ่งถ้าเราพูดถึง . ในบทความนี้เราจะพูดถึง BlockingQueue Interface ใน Java ตามลำดับต่อไปนี้:

BlockingQueue Interface ใน Java คืออะไร?

BlockingQueue Interface ใน Java เป็นคิวที่บล็อกเมื่อคุณพยายามยกเลิกคิวและคิวว่างเปล่าหรือถ้าคุณพยายามจัดคิวรายการให้กับคิวนั้นและคิวเต็มแล้ว เธรดที่พยายามยกเลิกคิวจากคิวว่างจะถูกบล็อกจนกว่าเธรดอื่นจะแทรกไอเท็มลงในคิว เธรดที่พยายามจัดคิวไอเท็มในคิวเต็มจะถูกบล็อกจนกว่าเธรดอื่นจะมีพื้นที่ว่างในคิวไม่ว่าจะโดยการยกเลิกการจัดคิวรายการอย่างน้อยหนึ่งรายการหรือการล้างคิวทั้งหมด





วิธีใช้แทนที่ใน java

ลำดับความสำคัญใน c ++

BlockingQueue Interface ใน Java ไม่ยอมรับโมฆะค่านิยมและโยนNullPointerExceptionถ้าคุณพยายามจัดเก็บค่าว่างในคิวการใช้งาน Java BlockingQueue คือ เธรดปลอดภัย . วิธีการเข้าคิวทั้งหมดมีลักษณะเป็นปรมาณูและใช้การล็อกภายในหรือรูปแบบอื่น ๆ ของการควบคุมภาวะพร้อมกัน



Java Queue Class Diagram

อินเตอร์เฟส Java Queue ขยายอินเตอร์เฟส Collection อินเทอร์เฟซคอลเลคชันขยายส่วนต่อประสานที่ทำซ้ำได้ คลาสการนำคิวที่ใช้บ่อยบางคลาส ได้แก่ LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,ฯลฯ AbstractQueue จัดเตรียมการใช้งานอินเทอร์เฟซ Queue แบบโครงกระดูกเพื่อลดความพยายามในการนำ Queue ไปใช้

การบล็อกประเภทคิว

BlockingQueue เป็นสองประเภท:



  • คิวที่ไม่ผูกมัด: ความจุของคิวการบล็อกจะถูกตั้งค่าเป็น Integer.MAX_VALUE ในกรณีของคิวการบล็อกที่ไม่ถูกผูกไว้คิวจะไม่ปิดกั้นเนื่องจากอาจมีขนาดใหญ่มาก เมื่อคุณเพิ่มองค์ประกอบขนาดจะใหญ่ขึ้น

ไวยากรณ์:
BlockingQueue บล็อกคิว = LinkedBlockingDeque ใหม่ ()

  • คิวที่ถูกผูกไว้: คิวประเภทที่สองคือคิวที่มีขอบเขต ในกรณีของคิวที่ถูกล้อมรอบคุณสามารถสร้างคิวโดยข้ามความจุของคิวในตัวสร้างคิว:
    ไวยากรณ์:
    // สร้างคิวการบล็อกที่มีความจุ 5

BlockingQueue บล็อกคิว = LinkedBlockingDeque ใหม่ (5)

วิธีการใน BlockingQueue Interface

เปลี่ยนประเภท ไวยากรณ์ของวิธีการ ใช้สำหรับ คำอธิบาย
บูลีน เพิ่ม (E และ) การแทรก

แทรกองค์ประกอบที่ระบุลงในคิวนี้หากสามารถทำได้ทันทีโดยไม่ละเมิดข้อ จำกัด ด้านความจุคืนค่าจริงเมื่อสำเร็จและโยน IllegalStateException หากไม่มีพื้นที่ว่างในขณะนี้

บูลีน มี (Object o) ตรวจสอบ

ส่งคืนจริงหากคิวนี้มีองค์ประกอบที่ระบุ

int ท่อระบายน้ำไปยัง (คอลเลกชัน c) การดึงข้อมูลหรือการนำออก

ลบองค์ประกอบที่มีทั้งหมดออกจากคิวนี้และเพิ่มลงในคอลเลกชันที่กำหนด

int drainTo (คอลเลกชัน c, int maxElements) การดึงข้อมูลหรือการนำออก

ลบองค์ประกอบที่มีอยู่ไม่เกินจำนวนที่กำหนดจากคิวนี้และเพิ่มลงในคอลเล็กชันที่กำหนด

พ่อครัวเป็นเครื่องมือในการเรียบเรียง
บูลีน ข้อเสนอ (E และ) การแทรก

แทรกองค์ประกอบที่ระบุลงในคิวนี้หากสามารถทำได้ทันทีโดยไม่ละเมิดข้อ จำกัด ด้านความจุโดยส่งคืนค่าจริงเมื่อสำเร็จและเป็นเท็จหากไม่มีช่องว่างในขณะนี้

บูลีน ข้อเสนอ (E e, long timeout, TimeUnit unit) การแทรก

แทรกองค์ประกอบที่ระบุลงในคิวนี้รอจนถึงเวลารอที่ระบุหากจำเป็นเพื่อให้มีพื้นที่ว่าง

คือ แบบสำรวจ (หมดเวลานานหน่วย TimeUnit) การดึงข้อมูลหรือการนำออก

ดึงและลบส่วนหัวของคิวนี้รอจนถึงเวลารอที่ระบุหากจำเป็นเพื่อให้องค์ประกอบพร้อมใช้งาน

เป็นโมฆะ ใส่ (E e) การแทรก

แทรกองค์ประกอบที่ระบุลงในคิวนี้รอหากจำเป็นเพื่อให้มีพื้นที่ว่าง

int ความจุที่เหลือ () ตรวจสอบ

ส่งคืนจำนวนขององค์ประกอบเพิ่มเติมที่คิวนี้สามารถตามสมควร (ในกรณีที่ไม่มีข้อ จำกัด ของหน่วยความจำหรือทรัพยากร) ยอมรับโดยไม่มีการบล็อกหรือ Integer.MAX_VALUE หากไม่มีขีด จำกัด ภายใน

บูลีน ลบ (Object o) + การดึงข้อมูลหรือการนำออก

ลบอินสแตนซ์เดียวขององค์ประกอบที่ระบุออกจากคิวนี้ถ้ามีอยู่

คือ ใช้เวลา () การดึงข้อมูลหรือการนำออก

ดึงและลบส่วนหัวของคิวนี้รอถ้าจำเป็นจนกว่าองค์ประกอบจะพร้อมใช้งาน

BlockingQueue Interface ใน Java ตัวอย่าง: บริการ

package com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue คลาสสาธารณะ ProducerConsumerService {public static void main (String [] args) {// การสร้าง BlockingQueue ของขนาด 10 BlockingQueue que = new ArrayBlocking (ArrayBlocking) 10) Producer Producer = ผู้ผลิตรายใหม่ (คิว) Consumer consumer = ผู้บริโภครายใหม่ (คิว) // ผู้ผลิตเริ่มต้นเพื่อสร้างข้อความในคิวเธรดใหม่ (ผู้ผลิต) .start () // ผู้บริโภคเริ่มใช้ข้อความจากคิวเธรดใหม่ (ผู้บริโภค) .start () System.out.println ('Producer and Consumer has been started')}}

ด้วยเหตุนี้เราจึงมาถึงตอนท้ายของบทความ BlockingQueue Interface ใน Java ฉันหวังว่าแนวคิดทั้งหมดของคุณจะชัดเจนแล้ว

ตรวจสอบไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาสำหรับนักเรียนและผู้เชี่ยวชาญที่ต้องการเป็น Java Developer หลักสูตรนี้ออกแบบมาเพื่อให้คุณเริ่มต้นการเขียนโปรแกรม Java และฝึกอบรมแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับเฟรมเวิร์ก Java ต่างๆเช่น Hibernate & Spring

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อก“ BlockingQueue Interface in Java” และเราจะติดต่อกลับโดยเร็วที่สุด