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

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())