Java : ConcurrentLinkedQueue with Examples

ConcurrentLinkedQueue (Java SE 20 & JDK 20) API Examples.
You will find code examples on most ConcurrentLinkedQueue methods.


Summary

An unbounded thread-safe queue based on linked nodes. This queue orders elements FIFO (first-in-first-out). The head of the queue is that element that has been on the queue the longest time. The tail of the queue is that element that has been on the queue the shortest time.

Class diagram

void test(Queue<Integer> queue) throws InterruptedException {
    for (int i = 0; i < 5; i++) {
        queue.add(i);
    }

    try (final var executor = Executors.newSingleThreadScheduledExecutor()) {

        executor.schedule(() -> {
            System.out.println("-- add value! --");
            queue.add(9999);
        }, 5, TimeUnit.SECONDS);

        try {
            for (final var value : queue) {
                System.out.println("value = " + value);
                TimeUnit.SECONDS.sleep(2);
            }
        } catch (ConcurrentModificationException e) {
            System.out.println("ConcurrentModificationException!");
        }
    }

    System.out.println("-- end --");
    System.out.println("queue = " + queue);
}
test(new LinkedList<>());

// Result
// ↓
//value = 0
//value = 1
//value = 2
//-- add value! --
//ConcurrentModificationException!
//-- end --
//queue = [0, 1, 2, 3, 4, 9999]

test(new ConcurrentLinkedQueue<>());

// Result
// ↓
//value = 0
//value = 1
//value = 2
//-- add value! --
//value = 3
//value = 4
//value = 9999
//-- end --
//queue = [0, 1, 2, 3, 4, 9999]

Constructors

ConcurrentLinkedQueue ()

Creates a ConcurrentLinkedQueue that is initially empty.

final var queue = new ConcurrentLinkedQueue<String>();

queue.add("aaa");
queue.add("bbb");
queue.add("ccc");

System.out.println(queue); // [aaa, bbb, ccc]
System.out.println(queue.size()); // 3

System.out.println(queue.remove()); // aaa
System.out.println(queue.remove()); // bbb
System.out.println(queue.remove()); // ccc

System.out.println(queue); // []
System.out.println(queue.isEmpty()); // true

ConcurrentLinkedQueue (Collection<? extends E> c)

Creates a ConcurrentLinkedQueue initially containing the elements of the given collection, added in traversal order of the collection's iterator.

final var c = List.of("a", "b", "c");

final var queue = new ConcurrentLinkedQueue<>(c);
System.out.println(queue); // [a, b, c]
System.out.println(queue.size()); // 3

Methods

boolean add (E e)

Inserts the specified element at the tail of this queue.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []

System.out.println(queue.add("aaa")); // true
System.out.println(queue); // [aaa]

System.out.println(queue.add("bbb")); // true
System.out.println(queue); // [aaa, bbb]

System.out.println(queue.add("ccc")); // true
System.out.println(queue); // [aaa, bbb, ccc]

boolean addAll (Collection<? extends E> c)

Appends all of the elements in the specified collection to the end of this queue, in the order that they are returned by the specified collection's iterator.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []

System.out.println(queue.addAll(List.of("a1"))); // true
System.out.println(queue); // [a1]

System.out.println(queue.addAll(List.of("b1", "b2"))); // true
System.out.println(queue); // [a1, b1, b2]

System.out.println(queue.addAll(List.of("c1", "c2", "c3"))); // true
System.out.println(queue); // [a1, b1, b2, c1, c2, c3]

void clear ()

Removes all of the elements from this queue.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []

queue.add("a");
System.out.println(queue); // [a]

queue.add("b");
System.out.println(queue); // [a, b]

queue.clear();
System.out.println(queue); // []

boolean contains (Object o)

Returns true if this queue contains the specified element.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "aaa", "bbb", "ccc");
System.out.println(queue); // [aaa, bbb, ccc]

System.out.println(queue.contains("aaa")); // true
System.out.println(queue.contains("bbb")); // true
System.out.println(queue.contains("XXX")); // false

void forEach (Consumer<? super E> action)

Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "aaa", "bbb", "ccc");
System.out.println(queue); // [aaa, bbb, ccc]

System.out.println("-- forEach --");
queue.forEach(value -> {
    System.out.println("value = " + value);
});

// Result
// ↓
//-- forEach --
//value = aaa
//value = bbb
//value = ccc

boolean isEmpty ()

Returns true if this queue contains no elements.

final var queue = new ConcurrentLinkedQueue<String>();
queue.add("a");
queue.add("b");
queue.add("c");

System.out.println(queue); // [a, b, c]
System.out.println(queue.isEmpty()); // false

queue.clear();
System.out.println(queue); // []
System.out.println(queue.isEmpty()); // true

Iterator<E> iterator ()

Returns an iterator over the elements in this queue in proper sequence.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "aaa", "bbb", "ccc");
System.out.println(queue); // [aaa, bbb, ccc]

final var iterator = queue.iterator();

System.out.println("-- forEachRemaining --");
iterator.forEachRemaining(value -> {
    System.out.println("value = " + value);
});

// Result
// ↓
//-- forEachRemaining --
//value = aaa
//value = bbb
//value = ccc

boolean offer (E e)

Inserts the specified element at the tail of this queue.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []

System.out.println(queue.offer("aaa")); // true
System.out.println(queue); // [aaa]

System.out.println(queue.offer("bbb")); // true
System.out.println(queue); // [aaa, bbb]

System.out.println(queue.offer("ccc")); // true
System.out.println(queue); // [aaa, bbb, ccc]

E peek ()

Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []

queue.add("aaa");
queue.add("bbb");
queue.add("ccc");

System.out.println(queue.peek()); // aaa
System.out.println(queue); // [aaa, bbb, ccc]

System.out.println(queue.poll()); // aaa
System.out.println(queue); // [bbb, ccc]

System.out.println(queue.peek()); // bbb
System.out.println(queue); // [bbb, ccc]

System.out.println(queue.poll()); // bbb
System.out.println(queue); // [ccc]

System.out.println(queue.peek()); // ccc
System.out.println(queue); // [ccc]

System.out.println(queue.poll()); // ccc
System.out.println(queue); // []

System.out.println(queue.peek()); // null
System.out.println(queue); // []

E poll ()

Retrieves and removes the head of this queue, or returns null if this queue is empty.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []

queue.add("aaa");
queue.add("bbb");
queue.add("ccc");

System.out.println(queue); // [aaa, bbb, ccc]

System.out.println(queue.poll()); // aaa
System.out.println(queue); // [bbb, ccc]

System.out.println(queue.poll()); // bbb
System.out.println(queue); // [ccc]

System.out.println(queue.poll()); // ccc
System.out.println(queue); // []

System.out.println(queue.poll()); // null
System.out.println(queue); // []

boolean remove (Object o)

Removes a single instance of the specified element from this queue, if it is present.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "aaa", "BBB", "aaa", "BBB", "ccc");
System.out.println(queue); // [aaa, BBB, aaa, BBB, ccc]

System.out.println(queue.remove("aaa")); // true
System.out.println(queue); // [BBB, aaa, BBB, ccc]

System.out.println(queue.remove("BBB")); // true
System.out.println(queue); // [aaa, BBB, ccc]

System.out.println(queue.remove("BBB")); // true
System.out.println(queue); // [aaa, ccc]

System.out.println(queue.remove("XXX")); // false
System.out.println(queue); // [aaa, ccc]

boolean removeAll (Collection<?> c)

Removes all of this collection's elements that are also contained in the specified collection (optional operation).

final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]

{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of())); // false
    System.out.println(queue); // [a, b, a, b, A, B]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of("a"))); // true
    System.out.println(queue); // [b, b, A, B]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of("a", "b"))); // true
    System.out.println(queue); // [A, B]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of("b", "a"))); // true
    System.out.println(queue); // [A, B]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of("A"))); // true
    System.out.println(queue); // [a, b, a, b, B]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of("X", "Y", "Z"))); // false
    System.out.println(queue); // [a, b, a, b, A, B]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.removeAll(List.of("A", "X", "Y", "Z"))); // true
    System.out.println(queue); // [a, b, a, b, B]
}

boolean removeIf (Predicate<? super E> filter)

Removes all of the elements of this collection that satisfy the given predicate.

final var queue = new ConcurrentLinkedQueue<String>();
queue.add("aaa");
queue.add("BBB");
queue.add("ccc");
queue.add("DDD");

System.out.println(queue); // [aaa, BBB, ccc, DDD]

final var ret = queue.removeIf(s -> {
    return s.equals(s.toUpperCase());
});

System.out.println(ret); // true
System.out.println(queue); // [aaa, ccc]
final var queue = new ConcurrentLinkedQueue<String>();
queue.add("aaa");
queue.add("bbb");

System.out.println(queue); // [aaa, bbb]

final var ret = queue.removeIf(s -> s.equals(s.toUpperCase()));

System.out.println(ret); // false
System.out.println(queue); // [aaa, bbb]

boolean retainAll (Collection<?> c)

Retains only the elements in this collection that are contained in the specified collection (optional operation).

final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]

{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of())); // true
    System.out.println(queue); // []
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of("a", "b"))); // true
    System.out.println(queue); // [a, b, a, b]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of("b", "a"))); // true
    System.out.println(queue); // [a, b, a, b]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of("A"))); // true
    System.out.println(queue); // [A]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of("X", "Y", "Z"))); // true
    System.out.println(queue); // []
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of("A", "X", "Y", "Z"))); // true
    System.out.println(queue); // [A]
}
{
    final var queue = new ConcurrentLinkedQueue<>(src);
    System.out.println(queue); // [a, b, a, b, A, B]

    System.out.println(queue.retainAll(List.of("a", "b", "A", "B"))); // false
    System.out.println(queue); // [a, b, a, b, A, B]
}

int size ()

Returns the number of elements in this queue.

final var queue = new ConcurrentLinkedQueue<String>();
System.out.println(queue); // []
System.out.println(queue.size()); // 0

queue.add("aaa");
System.out.println(queue); // [aaa]
System.out.println(queue.size()); // 1

queue.add("bbb");
System.out.println(queue); // [aaa, bbb]
System.out.println(queue.size()); // 2

queue.add("ccc");
System.out.println(queue); // [aaa, bbb, ccc]
System.out.println(queue.size()); // 3

Spliterator<E> spliterator ()

Returns a Spliterator over the elements in this queue.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "aaa", "bbb", "ccc");
System.out.println(queue); // [aaa, bbb, ccc]

final var spliterator = queue.spliterator();

System.out.println("-- forEachRemaining --");
spliterator.forEachRemaining(value -> {
    System.out.println("value = " + value);
});

// Result
// ↓
//-- forEachRemaining --
//value = aaa
//value = bbb
//value = ccc

Object[] toArray ()

Returns an array containing all of the elements in this queue, in proper sequence.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "a", "b", "c");
System.out.println(queue); // [a, b, c]

final Object[] array = queue.toArray();
System.out.println(Arrays.toString(array)); // [a, b, c]

<T> T[] toArray (T[] a)

Returns an array containing all of the elements in this queue, in proper sequence; the runtime type of the returned array is that of the specified array.

final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "a", "b", "c");
System.out.println(queue); // [a, b, c]

final String[] array = queue.toArray(new String[0]);
System.out.println(Arrays.toString(array)); // [a, b, c]
final var queue = new ConcurrentLinkedQueue<String>();
Collections.addAll(queue, "a", "b", "c");
System.out.println(queue); // [a, b, c]

{
    final String[] array = new String[3];
    System.out.println(Arrays.toString(array)); // [null, null, null]

    final var ret = queue.toArray(array);
    System.out.println(Arrays.toString(array)); // [a, b, c]
    System.out.println(Arrays.toString(ret)); // [a, b, c]
}
{
    final String[] array = new String[5];
    System.out.println(Arrays.toString(array)); // [null, null, null, null, null]

    final var ret = queue.toArray(array);
    System.out.println(Arrays.toString(array)); // [a, b, c, null, null]
    System.out.println(Arrays.toString(ret)); // [a, b, c, null, null]
}
{
    final String[] array = new String[1];
    System.out.println(Arrays.toString(array)); // [null]

    final var ret = queue.toArray(array);
    System.out.println(Arrays.toString(array)); // [a]
    System.out.println(Arrays.toString(ret)); // [a, b, c]
}

Methods declared in AbstractQueue

clear, element, remove

Please see the link below.

Methods declared in AbstractCollection

containsAll, toString

Please see the link below.

Methods declared in Collection

containsAll, equals, hashCode, parallelStream, stream, toArray

Please see the link below.

Methods declared in Queue

element, remove

Please see the link below.


Related posts

To top of page