diff --git a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java new file mode 100644 index 0000000000..f417b6b1a8 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java @@ -0,0 +1,57 @@ +package com.baeldung.concurrent.priorityblockingqueue; + +import org.assertj.core.api.Assertions; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.util.Lists.newArrayList; + +public class PriorityBlockingQueueUnitTest { + + @Test + public void shouldOrderQueue_whenPolling() throws InterruptedException { + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(); + ArrayList polledElements = new ArrayList<>(); + + queue.add(1); + queue.add(5); + queue.add(2); + queue.add(3); + queue.add(4); + + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + + assertThat(polledElements).containsExactly(1, 2, 3, 4, 5); + } + + @Test + public void shouldBlockThread_WhenPollingEmptyQueue() throws InterruptedException { + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(); + + final Thread thread = new Thread(() -> { + System.out.println("Polling..."); + while (true) { + try { + Integer poll = queue.take(); + System.out.println("Polled: " + poll); + } catch (InterruptedException e) {} + } + }); + thread.start(); + + Thread.sleep(TimeUnit.SECONDS.toMillis(5)); + System.out.println("Adding to queue"); + + queue.addAll(newArrayList(1, 5, 6, 1, 2, 6, 7)); + Thread.sleep(TimeUnit.SECONDS.toMillis(1)); + } +}