<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            Java中Queue和BlockingQueue的區別

            時間:2024-07-23 02:57:25 SUN認證 我要投稿
            • 相關推薦

            關于Java中Queue和BlockingQueue的區別

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

              1.BlockingQueue:支持兩個附加操作的 Queue,這兩個操作是:檢索元素時等待隊列變為非空,以及存儲元素時等待空間變得可用。

              2.BlockingQueue 不接受 null 元素。

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

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

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

              package test;

              import java.util.concurrent.ArrayBlockingQueue;

              import java.util.concurrent.BlockingQueue;

              /**

              * 生產者

              */

              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("生產后:"+queue.peek());

              }

              } catch (InterruptedException ex) {

              ex.printStackTrace();

              }

              }

              Character produce() {

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

              System.out.println("生產前:" + 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);

              }

              }

              /**

              * 一個生產者、兩個消費者

              *

              */

              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–

            【Java中Queue和BlockingQueue的區別】相關文章:

            JAVA和.NET開發過程中的區別10-25

            Java Web開發和J2EE的區別07-07

            PHP中MySQL、MySQLi和PDO的用法和區別07-01

            linux命令中su和sudo區別08-10

            跆拳道中WTF和ITF的區別05-21

            在Java中執行JavaScript代碼07-14

            Java中的動態代碼編程06-27

            速錄和打字的區別10-08

            爽膚水和柔膚水的區別05-07

            赤豆和紅豆的區別07-26

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看