Cách triển khai giao diện BlockingQueue trong Java



Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về cách triển khai Giao diện BlockingQueue trong Java.

Hàng đợi là một khía cạnh quan trọng của bất kỳ ngôn ngữ Lập trình nào. Đặc biệt nếu chúng ta nói về . Trong bài viết này, chúng ta sẽ thảo luận về Giao diện BlockingQueue trong Java theo thứ tự sau:

Giao diện BlockingQueue trong Java là gì?

Giao diện BlockingQueue trong Java là một hàng đợi chặn khi bạn cố gắng xếp hàng từ nó và hàng đợi trống hoặc nếu bạn cố xếp hàng vào nó và hàng đợi đã đầy. Một luồng đang cố gắng xếp hàng từ một hàng trống bị chặn cho đến khi một số luồng khác chèn một mục vào hàng đợi. Một chuỗi đang cố gắng xếp một mục trong hàng đợi đầy đủ sẽ bị chặn cho đến khi một số chuỗi khác tạo khoảng trống trong hàng đợi, bằng cách xếp lại một hoặc nhiều mục hoặc xóa hoàn toàn hàng đợi.





apache spark vs hadoop mapreduce

hàng đợi ưu tiên trong c ++

Giao diện BlockingQueue trong Java không chấp nhậnvô giá trịgiá trị và némNullPointerExceptionnếu bạn cố gắng lưu trữ giá trị null trong hàng đợi.Các triển khai Java BlockingQueue là chỉ an toàn . Tất cả các phương pháp xếp hàng đều có bản chất nguyên tử và sử dụng khóa bên trong hoặc các hình thức kiểm soát đồng thời khác.



Sơ đồ lớp hàng đợi Java

Giao diện Java Queue mở rộng giao diện Bộ sưu tập. Giao diện Bộ sưu tập mở rộng giao diện Có thể lặp lại. Một số lớp triển khai hàng đợi thường được sử dụng là LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,vv .. AbstractQueue cung cấp một triển khai cơ bản của giao diện Hàng đợi để giảm nỗ lực trong việc triển khai Hàng đợi.

BlockingQueue Các loại

BlockingQueue có hai loại:



  • Hàng đợi không giới hạn: Dung lượng của hàng đợi chặn sẽ được đặt thành Integer.MAX_VALUE. Trong trường hợp hàng đợi chặn không bị giới hạn, hàng đợi sẽ không bao giờ chặn vì nó có thể phát triển đến kích thước rất lớn. khi bạn thêm các yếu tố, kích thước của nó sẽ tăng lên.

Cú pháp:
Hàng đợi chặn BlockingQueue = new LinkedBlockingDeque ()

  • Hàng đợi có Giới hạn: Loại hàng đợi thứ hai là hàng đợi có giới hạn. Trong trường hợp hàng đợi bị giới hạn, bạn có thể tạo một hàng đợi bỏ qua dung lượng của hàng đợi trong hàm tạo hàng đợi:
    Cú pháp:
    // Tạo một hàng đợi chặn có dung lượng 5

Hàng đợi chặn BlockingQueue = new LinkedBlockingDeque (5)

Các phương thức trong giao diện BlockingQueue

Đổi loại Cú pháp phương thức Được dùng cho Sự miêu tả
boolean thêm (E và) Chèn

Chèn phần tử đã chỉ định vào hàng đợi này nếu có thể làm như vậy ngay lập tức mà không vi phạm các giới hạn dung lượng, trả về true khi thành công và ném IllegalStateException nếu hiện không có dung lượng.

boolean chứa (Đối tượng o) Xem xét

Trả về true nếu hàng đợi này chứa phần tử được chỉ định.

int draTo (Bộ sưu tập c) Lấy hoặc loại bỏ

Loại bỏ tất cả các phần tử có sẵn khỏi hàng đợi này và thêm chúng vào bộ sưu tập đã cho.

int draTo (Bộ sưu tập c, int maxElements) Lấy hoặc loại bỏ

Loại bỏ tối đa số phần tử có sẵn đã cho khỏi hàng đợi này và thêm chúng vào bộ sưu tập đã cho.

sự suy nghĩ trong python là gì
boolean đề nghị (E và) Chèn

Chèn phần tử được chỉ định vào hàng đợi này nếu có thể làm như vậy ngay lập tức mà không vi phạm các giới hạn dung lượng, trả về true khi thành công và false nếu hiện không còn chỗ trống.

boolean ưu đãi (E e, thời gian chờ lâu, đơn vị TimeUnit) Chèn

Chèn phần tử được chỉ định vào hàng đợi này, đợi đến thời gian chờ được chỉ định nếu cần thiết để có chỗ trống.

thăm dò ý kiến ​​(thời gian chờ lâu, đơn vị TimeUnit) Lấy hoặc loại bỏ

Lấy và loại bỏ phần đầu của hàng đợi này, đợi đến thời gian chờ được chỉ định nếu cần thiết để một phần tử có sẵn.

vô hiệu đặt (E e) Chèn

Chèn phần tử được chỉ định vào hàng đợi này, đợi nếu cần thiết để có dung lượng.

int dung lượng còn lại () Xem xét

Trả về số phần tử bổ sung mà hàng đợi này lý tưởng có thể chấp nhận (trong trường hợp không có bộ nhớ hoặc ràng buộc tài nguyên) mà không bị chặn hoặc Integer.MAX_VALUE nếu không có giới hạn nội tại.

boolean loại bỏ (Đối tượng o) + Lấy hoặc loại bỏ

Xóa một phiên bản của phần tử được chỉ định khỏi hàng đợi này,nếu nó có mặt.

lấy() Lấy hoặc loại bỏ

Lấy và loại bỏ phần đầu của hàng đợi này, đợi nếu cần cho đến khi một phần tử có sẵn.

Giao diện BlockingQueue trong Java Ví dụ: Dịch vụ

package com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue public class ProducerConsumerService {public static void main (String [] args) {// Tạo BlockingQueue có kích thước 10 BlockingQueue queue = new Array ( 10) Nhà sản xuất sản xuất = new Producer (hàng đợi) Người tiêu dùng tiêu dùng = mới Người tiêu dùng (hàng đợi) // nhà sản xuất bắt đầu tạo thông báo trong hàng đợi Chủ đề mới (nhà sản xuất) .start () // người tiêu dùng bắt đầu sử dụng thông báo từ hàng đợi Chủ đề mới (người tiêu dùng) .start () System.out.println ('Nhà sản xuất và Người tiêu dùng đã được bắt đầu')}}

Với điều này, chúng ta sẽ kết thúc bài viết về Giao diện BlockingQueue trong Java. Tôi hy vọng tất cả các khái niệm của bạn bây giờ rõ ràng.

Kiểm tra của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo và cấp chứng chỉ về Java J2EE và SOA của Edureka được thiết kế cho sinh viên và các chuyên gia muốn trở thành Nhà phát triển Java. Khóa học được thiết kế để cung cấp cho bạn khởi đầu về lập trình Java và đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog “Giao diện BlockingQueue trong Java” này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.