คิวเป็นสิ่งสำคัญของภาษาโปรแกรมใด ๆ โดยเฉพาะอย่างยิ่งถ้าเราพูดถึง . ในบทความนี้เราจะพูดถึง BlockingQueue Interface ใน Java ตามลำดับต่อไปนี้:
- BlockingQueue Interface ใน Java คืออะไร?
- การบล็อกประเภทคิว
- วิธีการใน BlockingQueue Interface
- BlockingQueue Interface ใน Java ตัวอย่าง: บริการ
BlockingQueue Interface ใน Java คืออะไร?
BlockingQueue Interface ใน Java เป็นคิวที่บล็อกเมื่อคุณพยายามยกเลิกคิวและคิวว่างเปล่าหรือถ้าคุณพยายามจัดคิวรายการให้กับคิวนั้นและคิวเต็มแล้ว เธรดที่พยายามยกเลิกคิวจากคิวว่างจะถูกบล็อกจนกว่าเธรดอื่นจะแทรกไอเท็มลงในคิว เธรดที่พยายามจัดคิวไอเท็มในคิวเต็มจะถูกบล็อกจนกว่าเธรดอื่นจะมีพื้นที่ว่างในคิวไม่ว่าจะโดยการยกเลิกการจัดคิวรายการอย่างน้อยหนึ่งรายการหรือการล้างคิวทั้งหมด
วิธีใช้แทนที่ใน java
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” และเราจะติดต่อกลับโดยเร็วที่สุด