Hướng Dẫn Và Ví Dụ Java BlockingQueue - Openplanning
Có thể bạn quan tâm
- Viết Chương Trình Java Nhập Vào 2 Số Nguyên A B Xác định Số Lớn Nhất (max) Số Nhỏ Nhất Trong 2 Số
- Viết Chương Trình Javascript để Lấy Một Phần Tử Ngẫu Nhiên Từ Một Mảng
- Viết Chương Trình Javascript Kiểm Tra Ký Tự đầu Tiên Của Chuỗi Có Phải Là Ký Tự Hoa Hay Không
- Viết Chương Trình Javascript Tìm Các Phần Tử Trùng Lặp Trong Mảng
- Viết Chương Trình Java Theo Cho Bài Book Và Author Biết Rằng Mỗi Book được Viết Bởi Nhiều Author
- Tất cả tài liệu
- Java
- Java Basic
- Java Collections Framework
- Java IO
- Java New IO
- Java Date Time
- Servlet/JSP
- Eclipse Tech
- SWT
- RCP
- RAP
- Eclipse Plugin Tools
- XML & HTML
- Java Opensource
- Java Application Servers
- Maven
- Gradle
- Servlet/Jsp
- Thymeleaf
- Spring
- Spring Boot
- Spring Cloud
- Struts2
- Hibernate
- Java Web Service
- JavaFX
- SWT
- Oracle ADF
- Android
- iOS
- Python
- Swift
- C#
- C/C++
- Ruby
- Dart
- Batch
- Database
- Oracle
- MySQL
- SQL Server
- PostGres
- Other Database
- Oracle APEX
- Report
- Client
- ECMAScript / Javascript
- TypeScript
- NodeJS
- ReactJS
- Flutter
- AngularJS
- HTML
- CSS
- Bootstrap
- OS
- Ubuntu
- Solaris
- Mac OS
- VPS
- Git
- SAP
- Amazon AWS
- Khác
- Chưa phân loại
- Phần mềm & ứng dụng tiện ích
- VirtualBox
- VmWare
- BlockingQueue
- BlockingQueue methods
- Ví dụ
- drainTo(Collection<? super E>)
- drainTo(Collection<? super E>, int)
- offer(E, long, TimeUnit)
- poll(long, TimeUnit)
- put(E e)
- remainingCapacity()
- take()
1. BlockingQueue
BlockingQueue là một interface con của Queue, nó cung cấp các hoạt động bổ xung và có ích trong tình huống hàng đợi trống hoặc đầy các phần tử.public interface BlockingQueue<E> extends Queue<E>- Hướng dẫn và ví dụ Java Queue
| Interface | Queue<E> | |||
| Interface | BlockingQueue<E> | |||
| Action | Throws exception | Special value | Blocks | Times out |
| Insert | boolean add(e) | boolean offer(e) | void put(e) | boolean offer(e, time, unit) |
| Remove | E remove() | E poll() | E take() | E poll(time, unit) |
| Examine | E element() | E peek() | ||
- take(): Trả về phần tử đứng đầu và loại bỏ phần tử này ra khỏi hàng đợi. Nếu hàng đợi trống, phương thức sẽ chờ đợi cho tới khi có một phần tử khả dụng trong hàng đợi.
- poll(timeout,unit): Trả về phần tử đứng đầu và loại bỏ phần tử này ra khỏi hàng đợi. Nếu hàng đợi trống, phương thức sẽ chờ đợi có một phần tử khả dụng trong một khoảng thời gian được chỉ định. Nếu thời gian chờ đợi kết thúc mà không có phần tử khả dụng nào phương thức sẽ trả về null.
- put(e): Chèn một phần tử vào hàng đợi. Nếu hàng đợi đầy phương thức này sẽ chờ đợi cho tới khi có một không gian khả dụng để chèn.
- offer(e,timeout,unit): Chèn một phần tử vào hàng đợi. Nếu hàng đợi đầy phương thức sẽ chờ đợi có một không gian khả dụng để chèn, trong một khoảng thời gian được chỉ định. Nếu thời gian chờ đợi kết thúc mà không có bất kỳ một không gian khả dụng nào, sẽ không có hành động nào được thực hiện và phương thức trả về false.

- Queue
- Deque
- BlockingDeque
- TransferQueue
- SynchronousQueue
- PriorityBlockingQueue
- LinkedBlockingQueue
- ArrayBlockingQueue
- DelayQueue
- BlockingQueue không chấp nhận các phần tử null, nếu cố tình thêm một phần tử null vào hàng đợi này, NullPointerException sẽ được ném ra.
- Một BlockingQueue có thể bị giới hạn về dung lượng. Phương thức remainingCapacity() trả về dung lượng còn lại của hàng đợi này, hoặc trả về Integer.MAX_VALUE nếu hàng đợi không bị giới hạn dung lượng.
- BlockingQueue thường được sử dụng trong các ứng dụng kiểu Producer & Consumer (Nhà sản xuất và người tiêu dùng). BlockingQueue là hậu duệ của interface Collection nên phương thức remove(e) cũng được hỗ trợ. Tuy nhiên các phương thức như vậy hoạt động không thực sự hiệu quả và chỉ nhằm mục đích sử dụng không thường xuyên. Chẳng hạn, loại bỏ một sản phẩm lỗi ra khỏi hàng đợi.
- BlockingQueue là một hàng đợi an toàn theo luồng (thread-safe). Tất cả các phương thức hàng đợi đều là các hoạt động nguyên tử (Atomic Operations). Tuy nhiên, các phương thức được thừa kế từ interface Collection như addAll, containsAll, retainAll và removeAll không nhất thiết là các hoạt động nguyên tử, điều này phụ thuộc vào lớp triển khai interface BockingQueue. Vì vậy, có thể, chẳng hạn, gọi phương addAll(aCollection) có thể ném ra ngoại lệ nếu trong cùng một thời điểm có một thread nào đó thêm một phần tử vào aCollection.
- BlockingQueue không hỗ trợ các phương thức kiểu như "close" (đóng) hoặc "shutdown" (tắt). Chẳng hạn khi Producer (nhà sản xuất) muốn gửi đi một tín hiệu rằng sẽ không có "sản phẩm" nào được thêm vào hàng đợi nữa. Nhu cầu và việc sử dụng các tính năng này có xu hướng phụ thuộc vào việc triển khai. Giải pháp có thể là: Một "sản phẩm" cuối cùng và đặc biệt được thêm vào hàng đợi như một tín hiệu nói với Consumer (người tiêu dùng) rằng đây là sản phẩm cuối cùng được thêm vào hàng đợi.
- Khái niệm hoạt động nguyên tử trong khoa học máy tính
2. BlockingQueue methods
Danh sách các phương thức của interface BlockingQueue<E>:void put(E e) throws InterruptedException; boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException; E take() throws InterruptedException; E poll(long timeout, TimeUnit unit) throws InterruptedException; int remainingCapacity(); int drainTo(Collection<? super E> c); int drainTo(Collection<? super E> c, int maxElements);Các phương thức thừa kế từ interface Queue<E>:boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek();Các phương thức được thừa kế từ interface Collection<E>:int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a); boolean add(E e); boolean remove(Object o); boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o); int hashCode(); default <T> T[] toArray(IntFunction<T[]> generator) default boolean removeIf(Predicate<? super E> filter) default Spliterator<E> spliterator() default Stream<E> stream() default Stream<E> parallelStream()- Queue
- Collection
3. Ví dụ
Mô hình Producer/Consumer (Nhà sản xuất và người tiêu thụ) là một ví dụ điển hình trong việc sử dụng interface BlockingQueue. Các sản phẩm được tạo ra bởi những nhà sản xuất được thêm vào một hàng đợi trước khi chúng được lấy ra bởi những người tiêu thụ.
- Các thread Producer gọi phương thức BlockingQueue.put(e) để thêm các sản phẩm vào một BlockingQueue. Nếu hàng đợi đầy, phương thức put(e) sẽ chờ đợi cho tới khi có không gian khả dụng.
- Các thread Consumer gọi phương thức BlockingQueue.take() để lấy ra các sản phẩm từ hàng đợi, nếu hàng đợi rỗng phương thức này sẽ chờ đợi cho tới khi có sản phẩm khả dụng.
- Hướng dẫn và ví dụ Java ArrayBlockingQueue
4. drainTo(Collection<? super E>)
int drainTo(Collection<? super E> c);Loại bỏ tất cả các phần tử khỏi BlockingQueue này và thêm chúng vào một Collection được chỉ định. Sử dụng phương thức này là hiệu quả hơn so với việc gọi nhiều lần phương thức poll() hoặc remove().Phương thức drainTo(Collection) đảm bảo rằng hoặc tất cả các phần tử sẽ được di chuyển tới Collection thành công, hoặc không phần tử nào được chuyển sang Collection nếu có lỗi xẩy ra.5. drainTo(Collection<? super E>, int)
int drainTo(Collection<? super E> c, int maxElements);Loại bỏ tối đa maxElements phần tử khỏi BlockingQueue này và thêm chúng vào một Collection được chỉ định. Sử dụng phương thức này là hiểu quả hơn so với việc gọi nhiều lần phương thức poll() hoặc remove().Nếu có lỗi xẩy ra sẽ không có phần tử nào bị loại bỏ khỏi BlockingQueue này và không phần tử nào được thêm vào Collection.6. offer(E, long, TimeUnit)
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;Chèn một phần tử được chỉ định vào hàng đợi. Nếu hàng đợi đầy phương thức sẽ chờ đợi có không gian khả dụng để chèn, trong một khoảng thời gian được chỉ định. Nếu thời gian chờ đợi kết thúc mà không có bất kỳ một không gian khả dụng nào, sẽ không có hành động nào được thực hiện và phương thức trả về false.Ví dụ:queue.offer(e, 5, TimeUnit.HOURS); // 5 hours.7. poll(long, TimeUnit)
E poll(long timeout, TimeUnit unit) throws InterruptedException;Trả về phần tử đứng đầu và loại bỏ phần tử này ra khỏi hàng đợi. Nếu hàng đợi trống, phương thức sẽ chờ đợi có một phần tử khả dụng trong một khoảng thời gian được chỉ định. Nếu thời gian chờ đợi kết thúc mà không có phần tử khả dụng nào phương thức sẽ trả về null.Ví dụ:E e = queue.offer(2, TimeUnit.HOURS); // 2 hours8. put(E e)
void put(E e) throws InterruptedException;Chèn một phần tử vào hàng đợi. Nếu hàng đợi đầy phương thức này sẽ chờ đợi cho tới khi có một không gian khả dụng để chèn.9. remainingCapacity()
int remainingCapacity();Trả về dung lượng còn lại của hàng đợi này, hoặc trả về Integer.MAX_VALUE nếu hàng đợi không bị giới hạn dung lượng.Lớp ArrayBlockingQueue cho phép tạo ra một BlockingQueue với việc chỉ định số lượng tối đa các phần tử.- Hướng dẫn và ví dụ Java ArrayBlockingQueue
10. take()
E take() throws InterruptedException;Trả về phần tử đứng đầu và loại bỏ phần tử này ra khỏi hàng đợi. Nếu hàng đợi trống, phương thức sẽ chờ đợi cho tới khi có một phần tử khả dụng trong hàng đợi.Các hướng dẫn Java Collections Framework
- Hướng dẫn và ví dụ Java PriorityBlockingQueue
- Hướng dẫn sử dụng nền tảng tập hợp trong Java (Java Collection Framework)
- Hướng dẫn và ví dụ Java SortedSet
- Hướng dẫn và ví dụ Java List
- Hướng dẫn và ví dụ Java Iterator
- Hướng dẫn và ví dụ Java NavigableSet
- Hướng dẫn và ví dụ Java ListIterator
- Hướng dẫn và ví dụ Java ArrayList
- Hướng dẫn và ví dụ Java CopyOnWriteArrayList
- Hướng dẫn và ví dụ Java LinkedList
- Hướng dẫn và ví dụ Java Set
- Hướng dẫn và ví dụ Java TreeSet
- Hướng dẫn và ví dụ Java CopyOnWriteArraySet
- Hướng dẫn và ví dụ Java Queue
- Hướng dẫn và ví dụ Java Deque
- Hướng dẫn và ví dụ Java IdentityHashMap
- Hướng dẫn và ví dụ Java WeakHashMap
- Hướng dẫn và ví dụ Java Map
- Hướng dẫn và ví dụ Java SortedMap
- Hướng dẫn và ví dụ Java NavigableMap
- Hướng dẫn và ví dụ Java HashMap
- Hướng dẫn và ví dụ Java TreeMap
- Hướng dẫn và ví dụ Java PriorityQueue
- Hướng dẫn và ví dụ Java BlockingQueue
- Hướng dẫn và ví dụ Java ArrayBlockingQueue
- Hướng dẫn và ví dụ Java TransferQueue
- Java cơ bản
- Các hướng dẫn Java Date Time
- Các hướng dẫn Java IO
- Các hướng dẫn Maven
- Các hướng dẫn Java Web Services
- Các hướng dẫn Spring Boot
- Các hướng dẫn Spring Cloud
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn Gradle

Các hướng dẫn Java Collections Framework
- Hướng dẫn và ví dụ Java PriorityBlockingQueue
- Hướng dẫn sử dụng nền tảng tập hợp trong Java (Java Collection Framework)
- Hướng dẫn và ví dụ Java SortedSet
- Hướng dẫn và ví dụ Java List
- Hướng dẫn và ví dụ Java Iterator
- Hướng dẫn và ví dụ Java NavigableSet
- Hướng dẫn và ví dụ Java ListIterator
- Hướng dẫn và ví dụ Java ArrayList
- Hướng dẫn và ví dụ Java CopyOnWriteArrayList
- Hướng dẫn và ví dụ Java LinkedList
- Hướng dẫn và ví dụ Java Set
- Hướng dẫn và ví dụ Java TreeSet
- Hướng dẫn và ví dụ Java CopyOnWriteArraySet
- Hướng dẫn và ví dụ Java Queue
- Hướng dẫn và ví dụ Java Deque
- Hướng dẫn và ví dụ Java IdentityHashMap
- Hướng dẫn và ví dụ Java WeakHashMap
- Hướng dẫn và ví dụ Java Map
- Hướng dẫn và ví dụ Java SortedMap
- Hướng dẫn và ví dụ Java NavigableMap
- Hướng dẫn và ví dụ Java HashMap
- Hướng dẫn và ví dụ Java TreeMap
- Hướng dẫn và ví dụ Java PriorityQueue
- Hướng dẫn và ví dụ Java BlockingQueue
- Hướng dẫn và ví dụ Java ArrayBlockingQueue
- Hướng dẫn và ví dụ Java TransferQueue
- Java cơ bản
- Các hướng dẫn Java Date Time
- Các hướng dẫn Java IO
- Các hướng dẫn Maven
- Các hướng dẫn Java Web Services
- Các hướng dẫn Spring Boot
- Các hướng dẫn Spring Cloud
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn Gradle
Các bài viết mới nhất
- Dart Stream Single và Broadcast
- Xử lý lỗi trong Dart Stream
- Hướng dẫn và ví dụ Dart Stream
- So sánh đối tượng trong Dart với thư viện Equatable
- Flutter BloC cho người mới bắt đầu
- Xử lý lỗi 404 trong Flutter GetX
- Ví dụ đăng nhập và đăng xuất với Flutter Getx
- Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
- Hướng dẫn và ví dụ Flutter multi_dropdown
- Hướng dẫn và ví dụ Flutter flutter_form_builder
- Hướng dẫn và ví dụ Flutter GetX obs Obx
- Hướng dẫn và ví dụ Flutter GetX GetBuilder
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Flutter InkWell
- Hướng dẫn và ví dụ Flutter Radio
- Bài thực hành Flutter SharedPreferences
- Hướng dẫn và ví dụ Flutter Slider
- Hướng dẫn và ví dụ Flutter SkeletonLoader
- Chỉ định cổng cố định cho Flutter Web trên Android Studio
- Tạo Module trong Flutter
- Các hướng dẫn Java Collections Framework
Từ khóa » Viết Chương Trình Java Mô Phỏng Bài Toán Sản Xuất (producer) Và Tiêu Thụ (consumer) Là 02 Lớp Thread
-
Người Tiêu Dùng (Consumer) Và đồng Bộ Hóa Các Luồng Trong Java
-
Mô Tả Bài Toán. 2 A-Lớp Producer(Nhà Cung Cấp) - Quê Hương
-
Vấn đề Nhà Sản Xuất (Producer) – Người Tiêu Dùng (Consumer) Và ...
-
Lập Trình đa Luồng Trong Java (Java Multi-threading) | TopDev
-
[PDF] Http://vovanhai./
-
Java Bài 42: Thread Tập 2 - Các Cách Thức Để Tạo Một Thread
-
Lập Trình Đa Luồng (Multithreading) Demo Producer And Consumer ...
-
Hệ điều Hành (chương 2) - SlideShare
-
[PDF] HỆ ĐIỀU HÀNH - Rachbauer Kran
-
367 Câu Hỏi Phỏng Vấn Java Cốt Lõi Hàng đầu Cho Năm 2021
-
[PDF] Table Of Contents - GitHub Pages
-
Đề Cương Hệ điều Hành