预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Java中Queue和BlockingQueue的区别关于Java中Queue和BlockingQueue的区别队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。下面小编准备了关于Java中Queue和BlockingQueue的区别,提供给大家参考!1.BlockingQueue:支持两个附加操作的Queue,这两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。2.BlockingQueue不接受null元素。3.BlockingQueue可以是限定容量的`。4.BlockingQueue实现是线程安全的。Queue不是线程安全的。因此可以将Blockingqueue用于用于生产者-使用者队列。根据Api修改的一个例子,大家可以修改自己体验BlockingQueue的使用packagetest;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.BlockingQueue;/***生产者*/classProducerimplementsRunnable{privatefinalBlockingQueuequeue;Producer(BlockingQueueq){queue=q;}publicvoidrun(){try{for(inti=0;i<3;i++){queue.put(produce());System.out.println("生产后:"+queue.peek());}}catch(InterruptedExceptionex){ex.printStackTrace();}}Characterproduce(){charc=(char)(Math.random()*26+'A');System.out.println("生产前:"+c);returnc;}}/***消费者*/classConsumerimplementsRunnable{privatefinalBlockingQueuequeue;Consumer(BlockingQueueq){queue=q;}publicvoidrun(){try{while(true){consume(queue.take());//Thread.sleep(100);}}catch(InterruptedExceptionex){ex.printStackTrace();}}voidconsume(Characterc){System.out.println("消费:"+c);}}/***一个生产者、两个消费者**/classSetup{publicstaticvoidmain(String[]args){BlockingQueueq=newArrayBlockingQueue(1);Producerp=newProducer(q);Consumerc1=newConsumer(q);Consumerc2=newConsumer(q);newThread(p).start();newThread(c1).start();newThread(c2).start();}}–EOF–