Concurrency is very amazing in Java. java.util.concurrent
package contains lots of utilities which we could use in number of different ways.
In this tutorial we will go over difference between java.util.concurrent.ArrayBlockingQueue
and com.google.common.collect.EvictingQueue
.
What is EvictingQueue?
EvictingQueue
is part of Google's Guava library
. Which is a non-blocking
, bounded
(Fixed Size) queue that automatically removes
elements from the head
of the queue when attempting to add elements to a full queue
.
How to add Google’s Guava library to your eclipse-java Project?
You could add below maven dependency to pom.xml file if you are using maven project. In case of non-maven
project – you have to download it from here and include library into your project’s classpath.
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>
What is ArrayBlockingQueue?
It’s a blocking
, bounded
(Fixed Size) queue that stores the elements internally in an array. It CAN'T
store unlimited
amounts of elements. This queue orders elements FIFO
(first-in-first-out).
Read more
: Singleton Queue Example
Let’s get started on Example
- Create ArrayBlockingQueue with size 10
- Create EvictingQueue with size 10
- Try to add 15 elements to queue
- For EvictingQueue – it will not throw any error
- For ArrayBlockingQueue – it will throw
Queue Full
error
package crunchify.com.tutorial; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; import com.google.common.collect.EvictingQueue; /** * @author Crunchify.com * */ public class CrunchifyArrayBlockingQueueVsEvictingQueue { public static void main(String[] args) { // Test EvicktingQueue with size 10 CrunchifyEvictingQueue(); log("\n============= New LINE ==============\n"); // Test ArrayBlockingQueue with size 10 CrunchifyArrayBlockingQueue(); } private static void CrunchifyArrayBlockingQueue() { ArrayBlockingQueue<String> crunchifyQueue = new ArrayBlockingQueue<String>(10); String crunchifyMsg = "This is ArrayBlockingQueue - by Crunchify"; try { // We are looping for 15 times - Error once queue full for (int i = 1; i <= 15; i++) { crunchifyQueue.add(crunchifyMsg + i); log("ArrayBlockingQueue size: " + crunchifyQueue.size()); } } catch (Exception e) { log("\nException Occurred: "); e.printStackTrace(); } } private static void CrunchifyEvictingQueue() { Queue<String> crunchifyQueue = EvictingQueue.create(10); String crunchifyMsg = "This is EvictingQueue - by Crunchify"; try { // We are looping for 15 times - No error after queue full. // Instead it will remove element from queue in FIFO order for (int i = 1; i <= 15; i++) { crunchifyQueue.add(crunchifyMsg + i); log("EvictingQueue size: " + crunchifyQueue.size()); } } catch (Exception e) { log("Exception Occurred: " + e); } } private static void log(String crunchifyText) { System.out.println(crunchifyText); } }
Result:
EvictingQueue size: 1 EvictingQueue size: 2 EvictingQueue size: 3 EvictingQueue size: 4 EvictingQueue size: 5 EvictingQueue size: 6 EvictingQueue size: 7 EvictingQueue size: 8 EvictingQueue size: 9 EvictingQueue size: 10 EvictingQueue size: 10 <== Same size EvictingQueue size: 10 EvictingQueue size: 10 EvictingQueue size: 10 EvictingQueue size: 10 ============= New LINE ============== ArrayBlockingQueue size: 1 ArrayBlockingQueue size: 2 ArrayBlockingQueue size: 3 ArrayBlockingQueue size: 4 ArrayBlockingQueue size: 5 ArrayBlockingQueue size: 6 ArrayBlockingQueue size: 7 ArrayBlockingQueue size: 8 ArrayBlockingQueue size: 9 ArrayBlockingQueue size: 10 Exception Occurred: java.lang.IllegalStateException: Queue full at java.util.AbstractQueue.add(AbstractQueue.java:98) at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312) at crunchify.com.tutorial.CrunchifyArrayBlockingQueueVsEvictingQueue.CrunchifyArrayBlockingQueue(CrunchifyArrayBlockingQueueVsEvictingQueue.java:33) at crunchify.com.tutorial.CrunchifyArrayBlockingQueueVsEvictingQueue.main(CrunchifyArrayBlockingQueueVsEvictingQueue.java:23)
The post ArrayBlockingQueue Vs. Google Guava Non-Blocking EvictingQueue Example appeared first on Crunchify.
Author: App Shah