当前位置:学者斋 >

IT认证 >SUN认证 >

关于Java中Queue和BlockingQueue的区别

关于Java中Queue和BlockingQueue的区别

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。下面小编准备了关于Java中Queue和BlockingQueue的区别,提供给大家参考!

关于Java中Queue和BlockingQueue的区别

kingQueue:支持两个附加操作的 Queue,这两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。

kingQueue 不接受 null 元素。

kingQueue 可以是限定容量的'。

kingQueue 实现是线程安全的。Queue不是线程安全的。因此可以将Blockingqueue用于用于生产者-使用者队列。

根据Api修改的一个例子,大家可以修改自己体验BlockingQueue的使用

package test;

import yBlockingQueue;

import kingQueue;

/**

* 生产者

*/

class Producer implements Runnable {

private final BlockingQueue queue;

Producer(BlockingQueue q) {

queue = q;

}

public void run() {

try {

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

(produce());

tln("生产后:"+());

}

} catch (InterruptedException ex) {

tStackTrace();

}

}

Character produce() {

char c = (char) (om() * 26 + 'A');

tln("生产前:" + c);

return c;

}

}

/**

* 消费者

*/

class Consumer implements Runnable {

private final BlockingQueue queue;

Consumer(BlockingQueue q) {

queue = q;

}

public void run() {

try {

while (true) {

consume(());

//p(100);

}

} catch (InterruptedException ex) {

tStackTrace();

}

}

void consume(Character c) {

tln("消费:" + 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)t();

new Thread(c1)t();

new Thread(c2)t();

}

}

–EOF–

  • 文章版权属于文章作者所有,转载请注明 https://xuezhezhai.com/itrz/sun/ee64mk.html