一步一步认识阻塞队列
Posted 信小呆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一步一步认识阻塞队列相关的知识,希望对你有一定的参考价值。
阻塞队列是一种队列,一种可以在多线程环境下使用,并且支持阻塞等待的队列。也就是说,阻塞队列和一般的队列的区别就在于:
- 多线程环境支持,多个线程可以安全的访问队列
- 支持生产和消费等待,多个线程之间互相配合,当队列为空的时候,消费线程会阻塞等待队列不为空;当队列满了的时候,生产线 程就会阻塞直到队列不满。
如果你还没懂阻塞队列是啥,那这边在举个例子,你妈妈让你去她钱包里拿钱,可是钱包里没有钱,傻乎乎的你就一直看着钱包,啥事也不敢,就等里面有钱,或者是你妈妈让你把100块钱硬币放到钱包里,可是就塞不进去,傻乎乎的你有快开始在那里等着,等着你妈妈什么时候能够把钱包腾一些地方。~~~~太形象了,我都开始笑了。
其实就是队列满了,有个线程放不进去,或者队列空着,有个线程拿不出来。
现在使用代码实现一下
public class BlockingQueue
private List queue = new LinkedList();
private int limit = 10;
public BlockingQueue(int limit)
this.limit = limit;
//添加一个一个参数,如果满了,直接wait(),如果size()为0,叫醒其他线程
public synchronized void enqueue(Object item)
throws InterruptedException
while(this.queue.size() == this.limit)
wait();
if(this.queue.size() == 0)
notifyAll();
this.queue.add(item);
//删除数据正好相反
public synchronized Object dequeue()
throws InterruptedException
while(this.queue.size() == 0)
wait();
if(this.queue.size() == this.limit)
notifyAll();
return this.queue.remove(0);
但是这个还是有毛病的,虽然适合这个阻塞的队列,当然jdk自带的阻塞队列那么优秀,拿来直接用呗,BlockingQueue等你百度学习
以上是关于一步一步认识阻塞队列的主要内容,如果未能解决你的问题,请参考以下文章