Close

Java Collections - ArrayBlockingQueue.take() Examples

Java Collections Java Java API 


Class:

java.util.concurrent.ArrayBlockingQueue

java.lang.Objectjava.lang.Objectjava.util.AbstractCollectionjava.util.AbstractCollectionjava.util.CollectionCollectionjava.util.AbstractQueuejava.util.AbstractQueuejava.util.QueueQueuejava.util.concurrent.ArrayBlockingQueuejava.util.concurrent.ArrayBlockingQueuejava.util.concurrent.BlockingQueueBlockingQueuejava.io.SerializableSerializableLogicBig

Method:

E take()
throws InterruptedException

Retrieves and removes the head of this queue, waiting if necessary until an element becomes available.


Examples


package com.logicbig.example.arrayblockingqueue;

import java.util.Arrays;
import java.util.concurrent.ArrayBlockingQueue;

public class TakeExample {

public static void main(String... args) throws InterruptedException {
ArrayBlockingQueue<Integer> q = new ArrayBlockingQueue<>(2);
q.add(0);
new Thread(() -> {
for (int i = 0; i < 5; i++) {
print("Attempt taking an item", "current size: " + q.size());
try {
Integer taken = q.take();
print("taken: " + taken);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Thread.sleep(100);

for (int i = 1; i <= 5; i++) {
print("adding an item: " + i);
q.put(i);
Thread.sleep(100);
}
}

private static void print(String... s) {
System.out.printf("%s (Thread: %s)%n", Arrays.toString(s), Thread.currentThread().getName());
}
}

Output

[Attempt taking an item, current size: 1] (Thread: Thread-0)
[taken: 0] (Thread: Thread-0)
[Attempt taking an item, current size: 0] (Thread: Thread-0)
[adding an item: 1] (Thread: com.logicbig.example.arrayblockingqueue.TakeExample.main())
[taken: 1] (Thread: Thread-0)
[Attempt taking an item, current size: 0] (Thread: Thread-0)
[adding an item: 2] (Thread: com.logicbig.example.arrayblockingqueue.TakeExample.main())
[taken: 2] (Thread: Thread-0)
[Attempt taking an item, current size: 0] (Thread: Thread-0)
[adding an item: 3] (Thread: com.logicbig.example.arrayblockingqueue.TakeExample.main())
[taken: 3] (Thread: Thread-0)
[Attempt taking an item, current size: 0] (Thread: Thread-0)
[adding an item: 4] (Thread: com.logicbig.example.arrayblockingqueue.TakeExample.main())
[taken: 4] (Thread: Thread-0)
[adding an item: 5] (Thread: com.logicbig.example.arrayblockingqueue.TakeExample.main())




See Also