No…
[root@cmhlcarchapp01 ~]# cat t.java import java.util.concurrent.*; public class t implements Runnable { static ArrayBlockingQueue Q = new ArrayBlockingQueue(5); String type; public static void main (String args[]) { t n = new t("producer"); t n2 = new t("consumer"); } public t(String type) { Thread t = new Thread(this); this.type = type; t.start(); } public void run() { try { if (this.type.equals("producer")) { for (int i = 1; i <= 10; i++) { t.Q.put(i); Thread.sleep(2000); } } else if (this.type.equals("consumer")) { for (int i = 1; i <= 10; i++) { System.out.println(t.Q.take()); } } } catch (Exception e) { e.printStackTrace(); } } } [root@cmhlcarchapp01 ~]# javac t.java Note: t.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. [root@cmhlcarchapp01 ~]# time java t 1 2 3 4 5 6 7 8 9 10 real 0m20.088s user 0m0.088s sys 0m0.019s [root@cmhlcarchapp01 ~]#
You will see the following if the Queue is full and the producer can't add to it...
"Thread-0" #8 prio=5 os_prio=0 tid=0x00007f90e00f7000 nid=0x306b waiting on condition [0x00007f90c36f5000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000d70625e8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:353) at t.run(t.java:25) at java.lang.Thread.run(Thread.java:745)
...and the following if the consumer is waiting on what is an empty queue...
"Thread-1" #9 prio=5 os_prio=0 tid=0x00007fd980101000 nid=0x35b4 waiting on condition [0x00007fd962f8d000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000d70625d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403) at t.run(t.java:31) at java.lang.Thread.run(Thread.java:745)