• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. Java中Queue和BlockingQueue的區(qū)別

        時間:2024-07-23 02:57:25 SUN認(rèn)證 我要投稿
        • 相關(guān)推薦

        關(guān)于Java中Queue和BlockingQueue的區(qū)別

          隊列是一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊尾,進(jìn)行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。下面小編準(zhǔn)備了關(guān)于Java中Queue和BlockingQueue的區(qū)別,提供給大家參考!

          1.BlockingQueue:支持兩個附加操作的 Queue,這兩個操作是:檢索元素時等待隊列變?yōu)榉强眨约按鎯υ貢r等待空間變得可用。

          2.BlockingQueue 不接受 null 元素。

          3.BlockingQueue 可以是限定容量的。

          4.BlockingQueue 實現(xiàn)是線程安全的。Queue不是線程安全的。因此可以將Blockingqueue用于用于生產(chǎn)者-使用者隊列。

          根據(jù)Api修改的一個例子,大家可以修改自己體驗BlockingQueue的使用

          package test;

          import java.util.concurrent.ArrayBlockingQueue;

          import java.util.concurrent.BlockingQueue;

          /**

          * 生產(chǎn)者

          */

          class Producer implements Runnable {

          private final BlockingQueue queue;

          Producer(BlockingQueue q) {

          queue = q;

          }

          public void run() {

          try {

          for (int i = 0; i < 3; i++) {

          queue.put(produce());

          System.out.println("生產(chǎn)后:"+queue.peek());

          }

          } catch (InterruptedException ex) {

          ex.printStackTrace();

          }

          }

          Character produce() {

          char c = (char) (Math.random() * 26 + 'A');

          System.out.println("生產(chǎn)前:" + c);

          return c;

          }

          }

          /**

          * 消費者

          */

          class Consumer implements Runnable {

          private final BlockingQueue queue;

          Consumer(BlockingQueue q) {

          queue = q;

          }

          public void run() {

          try {

          while (true) {

          consume(queue.take());

          //Thread.sleep(100);

          }

          } catch (InterruptedException ex) {

          ex.printStackTrace();

          }

          }

          void consume(Character c) {

          System.out.println("消費:" + c);

          }

          }

          /**

          * 一個生產(chǎn)者、兩個消費者

          *

          */

          class Setup {

          public static void main(String[] args) {

          BlockingQueue q = new ArrayBlockingQueue(1);

          Producer p = new Producer(q);

          Consumer c1 = new Consumer(q);

          Consumer c2 = new Consumer(q);

          new Thread(p).start();

          new Thread(c1).start();

          new Thread(c2).start();

          }

          }

          –EOF–

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【Java中Queue和BlockingQueue的區(qū)別】相關(guān)文章:

        JAVA和.NET開發(fā)過程中的區(qū)別10-25

        Java Web開發(fā)和J2EE的區(qū)別07-07

        PHP中MySQL、MySQLi和PDO的用法和區(qū)別07-01

        linux命令中su和sudo區(qū)別08-10

        跆拳道中WTF和ITF的區(qū)別05-21

        在Java中執(zhí)行JavaScript代碼07-14

        Java中的動態(tài)代碼編程06-27

        速錄和打字的區(qū)別10-08

        爽膚水和柔膚水的區(qū)別05-07

        赤豆和紅豆的區(qū)別07-26

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 欧美一级一区二区三区免费 | 亚洲香蕉午夜国产理论电影 | 思思久热精品视频 | 亚洲欧美日韩综合在线 | 亚洲成A∨人片在线观看不卡 | 亚洲色精品vr一区二区 |

            關(guān)于Java中Queue和BlockingQueue的區(qū)別

              隊列是一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊尾,進(jìn)行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。下面小編準(zhǔn)備了關(guān)于Java中Queue和BlockingQueue的區(qū)別,提供給大家參考!

              1.BlockingQueue:支持兩個附加操作的 Queue,這兩個操作是:檢索元素時等待隊列變?yōu)榉强眨约按鎯υ貢r等待空間變得可用。

              2.BlockingQueue 不接受 null 元素。

              3.BlockingQueue 可以是限定容量的。

              4.BlockingQueue 實現(xiàn)是線程安全的。Queue不是線程安全的。因此可以將Blockingqueue用于用于生產(chǎn)者-使用者隊列。

              根據(jù)Api修改的一個例子,大家可以修改自己體驗BlockingQueue的使用

              package test;

              import java.util.concurrent.ArrayBlockingQueue;

              import java.util.concurrent.BlockingQueue;

              /**

              * 生產(chǎn)者

              */

              class Producer implements Runnable {

              private final BlockingQueue queue;

              Producer(BlockingQueue q) {

              queue = q;

              }

              public void run() {

              try {

              for (int i = 0; i < 3; i++) {

              queue.put(produce());

              System.out.println("生產(chǎn)后:"+queue.peek());

              }

              } catch (InterruptedException ex) {

              ex.printStackTrace();

              }

              }

              Character produce() {

              char c = (char) (Math.random() * 26 + 'A');

              System.out.println("生產(chǎn)前:" + c);

              return c;

              }

              }

              /**

              * 消費者

              */

              class Consumer implements Runnable {

              private final BlockingQueue queue;

              Consumer(BlockingQueue q) {

              queue = q;

              }

              public void run() {

              try {

              while (true) {

              consume(queue.take());

              //Thread.sleep(100);

              }

              } catch (InterruptedException ex) {

              ex.printStackTrace();

              }

              }

              void consume(Character c) {

              System.out.println("消費:" + c);

              }

              }

              /**

              * 一個生產(chǎn)者、兩個消費者

              *

              */

              class Setup {

              public static void main(String[] args) {

              BlockingQueue q = new ArrayBlockingQueue(1);

              Producer p = new Producer(q);

              Consumer c1 = new Consumer(q);

              Consumer c2 = new Consumer(q);

              new Thread(p).start();

              new Thread(c1).start();

              new Thread(c2).start();

              }

              }

              –EOF–