Quantcast
Channel: Crunchify
Viewing all articles
Browse latest Browse all 1037

ArrayBlockingQueue Vs. Google Guava Non-Blocking EvictingQueue Example

$
0
0

Crunchify ArrayBlockingQueue Vs EvictingQueue Example

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

  1. Create ArrayBlockingQueue with size 10
  2. Create EvictingQueue with size 10
  3. Try to add 15 elements to queue
  4. For EvictingQueue – it will not throw any error
  5. 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)

Have anything to add to this article? Please chime in and join the conversion.

The post ArrayBlockingQueue Vs. Google Guava Non-Blocking EvictingQueue Example appeared first on Crunchify.
Author: App Shah

Viewing all articles
Browse latest Browse all 1037

Trending Articles