Detailed explanation of blocking queue BlockingQueue examples in java
This article mainly introduces the detailed explanation and examples of the blocking queue BlockingQueue in java. Friends who need it can refer to
The detailed explanation and examples of the blocking queue BlockingQueue in java
BlockingQueue is a good solution to the transmission of data in multi-threads. First of all, BlockingQueue is an interface. It has roughly four implementation classes. This is a very special queue. If the BlockQueue is empty, the operation of getting things from the BlockingQueue is Will be blocked and enter the waiting state, and will not be awakened until the BlockingQueue has something in it. Similarly, if the BlockingQueue is full, any operation that attempts to store something in it will also be blocked and enter the waiting state, and will not be awakened until there is space in the BlockingQueue. will be awakened to continue the operation.
Four implementation classes of BlockingQueue:
1.ArrayBlockingQueue: A BlockingQueue with a specified size. Its constructor must take an int parameter to indicate its size. It contains The objects are sorted in FIFO (first in, first out) order.
2. LinkedBlockingQueue: BlockingQueue of variable size. If its constructor takes a parameter with a specified size, the generated BlockingQueue has a size limit. If there is no size parameter, the size of the generated BlockingQueue is determined by Integer.MAX_VALUE. The objects it contains are sorted in FIFO (first in, first out) order
3.PriorityBlockingQueue: similar to LinkedBlockQueue, but the sorting of the objects it contains is not FIFO, but based on the natural sorting order of the objects or the order determined by the Comparator of the constructor.
4.SynchronousQueue: a special BlockingQueue, for which The operation must be completed alternately by putting and taking.
Common methods of BlockingQueue:
1)add(anObject): Add anObject to the BlockingQueue, that is, if the BlockingQueue If it can be accommodated, return true, otherwise an exception will be reported
2) offer(anObject): Indicates that if possible, add anObject to the BlockingQueue, that is, if the BlockingQueue can accommodate it, return true, otherwise return false.
3)put(anObject): Add anObject to the BlockingQueue. If there is no space in the BlockQueue, the thread calling this method will be blocked until there is space in the BlockingQueue before continuing.
4)poll(time): Take away the first object in the BlockingQueue. If it cannot be taken out immediately, you can wait for the time specified by the time parameter. If it cannot be taken out, return null
5)take(): Take the first object in the BlockingQueue. If the BlockingQueue is empty, the block will enter the waiting state until new objects are added to the Blocking
Example:
This example mainly simulates the workflow between producers and consumers. It is a simple scenario where consumers wait for producers to produce products for consumers to consume.
Producer:
package com.gefufeng; import java.util.concurrent.BlockingQueue; public class Producter implements Runnable{ private BlockingQueue<String> blockingQueue; public Producter(BlockingQueue<String> blockingQueue){ this.blockingQueue = blockingQueue; } @Override public void run() { try { blockingQueue.put("我生产的" + Thread.currentThread().getName()); System.out.println("我生产的" + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("生产失败"); } } }
Consumer:
package com.gefufeng; import java.util.concurrent.BlockingQueue; public class Customer implements Runnable{ private BlockingQueue<String> blockingQueue; public Customer(BlockingQueue<String> blockingQueue){ this.blockingQueue = blockingQueue; } @Override public void run() { for(;;){ try { String threadName = blockingQueue.take(); System.out.println("取出:" + threadName); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("取出失败"); } } } }
Execution class:
package com.gefufeng; import java.util.concurrent.ArrayBlockingQueue; public class Executer { public static void main(String[] args) { ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<String>(2); Producter producter = new Producter(arrayBlockingQueue); Customer cusotmer = new Customer(arrayBlockingQueue); new Thread(cusotmer).start(); for(;;){ try { Thread.sleep(2000); new Thread(producter).start(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
First, the consumer waits for the product in a loop, When blockingQueue.take() is executed for the first time in the loop, no product can be produced, so it enters the blocking state. Two seconds later, the producer produces a product, so the blockingQueue gets the product, prints the log, and then the consumer After executing the second loop, it was found that blockingQueue.take() did not get the product again, so it entered the blocking state again. . . Loop in sequence
The above is the detailed content of Detailed explanation of blocking queue BlockingQueue examples in java. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
