{"id":6702,"date":"2018-07-10T08:01:44","date_gmt":"2018-07-10T13:01:44","guid":{"rendered":"http:\/\/appcrawler.com\/wordpress\/?p=6702"},"modified":"2018-07-10T08:02:12","modified_gmt":"2018-07-10T13:02:12","slug":"does-blockingqueue-take-use-cpu","status":"publish","type":"post","link":"http:\/\/appcrawler.com\/wordpress\/2018\/07\/10\/does-blockingqueue-take-use-cpu\/","title":{"rendered":"Does BlockingQueue.take() use CPU?"},"content":{"rendered":"<p>No&#8230;<\/p>\n<pre>\r\n[root@cmhlcarchapp01 ~]# cat t.java\r\nimport java.util.concurrent.*;\r\n\r\npublic class t implements Runnable {\r\n  static ArrayBlockingQueue Q = new ArrayBlockingQueue(5);\r\n  String type;\r\n  public static void main (String args[]) {\r\n    t n = new t(\"producer\");\r\n    t n2 = new t(\"consumer\");\r\n  }\r\n\r\n  public t(String type) {\r\n    Thread t = new Thread(this);\r\n    this.type = type;\r\n    t.start();\r\n  }\r\n\r\n  public void run() {\r\n    try {\r\n      if (this.type.equals(\"producer\")) {\r\n        for (int i = 1; i <= 10; i++) {\r\n          t.Q.put(i);\r\n          Thread.sleep(2000);\r\n        }\r\n      }\r\n      else if (this.type.equals(\"consumer\")) {\r\n        for (int i = 1; i <= 10; i++) {\r\n          System.out.println(t.Q.take());\r\n        }\r\n      }\r\n    }\r\n    catch (Exception e) {\r\n      e.printStackTrace();\r\n    }\r\n  }\r\n}\r\n[root@cmhlcarchapp01 ~]# javac t.java\r\nNote: t.java uses unchecked or unsafe operations.\r\nNote: Recompile with -Xlint:unchecked for details.\r\n[root@cmhlcarchapp01 ~]# time java t\r\n1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n\r\nreal    0m20.088s\r\nuser    0m0.088s\r\nsys     0m0.019s\r\n[root@cmhlcarchapp01 ~]#\r\n<\/pre>\n<p>You will see the following if the Queue is full and the producer can't add to it...<\/p>\n<pre>\r\n\"Thread-0\" #8 prio=5 os_prio=0 tid=0x00007f90e00f7000 nid=0x306b waiting on condition [0x00007f90c36f5000]\r\n   java.lang.Thread.State: WAITING (parking)\r\n        at sun.misc.Unsafe.park(Native Method)\r\n        - parking to wait for  <0x00000000d70625e8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)\r\n        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)\r\n        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)\r\n        at java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:353)\r\n        at t.run(t.java:25)\r\n        at java.lang.Thread.run(Thread.java:745)\r\n<\/pre>\n<p>...and the following if the consumer is waiting on what is an empty queue...<\/p>\n<pre>\r\n\"Thread-1\" #9 prio=5 os_prio=0 tid=0x00007fd980101000 nid=0x35b4 waiting on condition [0x00007fd962f8d000]\r\n   java.lang.Thread.State: WAITING (parking)\r\n        at sun.misc.Unsafe.park(Native Method)\r\n        - parking to wait for  <0x00000000d70625d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)\r\n        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)\r\n        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)\r\n        at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)\r\n        at t.run(t.java:31)\r\n        at java.lang.Thread.run(Thread.java:745)\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>No&#8230; [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(&#8220;producer&#8221;); t n2 = new t(&#8220;consumer&#8221;); } public&hellip;<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"http:\/\/appcrawler.com\/wordpress\/2018\/07\/10\/does-blockingqueue-take-use-cpu\/\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"footnotes":""},"categories":[24,25,77],"tags":[],"_links":{"self":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts\/6702"}],"collection":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/comments?post=6702"}],"version-history":[{"count":4,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts\/6702\/revisions"}],"predecessor-version":[{"id":6742,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/posts\/6702\/revisions\/6742"}],"wp:attachment":[{"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/media?parent=6702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/categories?post=6702"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/appcrawler.com\/wordpress\/wp-json\/wp\/v2\/tags?post=6702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}