久久久久无码精品,四川省少妇一级毛片,老老熟妇xxxxhd,人妻无码少妇一区二区

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

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

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

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

  1.BlockingQueue:支持兩個附加操作的 Queue,這兩個操作是:檢索元素時等待隊(duì)列變?yōu)榉强,以及存儲元素時等待空間變得可用。

  2.BlockingQueue 不接受 null 元素。

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

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

  根據(jù)Api修改的一個例子,大家可以修改自己體驗(yàn)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;

  }

  }

  /**

  * 消費(fèi)者

  */

  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("消費(fèi):" + c);

  }

  }

  /**

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

  *

  */

  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的區(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