玖叶教程网

前端编程开发入门

多线程系列:BlockingQueue

阻塞队列BlockingQueue

BlockingQueue是iuc包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。并发包下很多高级同步类的实现都是基于BlockingQueue实现的。

主要方法:

方法/处理方式抛出异常返回特殊值一直阻塞超时退出
插入数据方法add(e)offer(e)put(e)offer(e, timeout, unit)
移除数据方法remove()poll()take()pull(timeout, unit)
检查方法element()peek()不可用不可用

实现:

LinkedBlockingQueue(无界队列)、

ArrayBlockingQueue(有固定大小的队列)、

SynchronousQueue(大小为1的队列)。

DelayQueue (对元素进行持有直到一个特定的延迟到期)

PriorityBlockingQueue 是一个无界的并发队列。

经典问题 生产者和消费者问题

阻塞队列的最长使用的例子就是生产者消费者模式,也是各种实现生产者消费者模式方式中首选的方式。

其实阻塞队列实现阻塞同步的方式很简单,使用的就是是lock锁的多条件(condition)阻塞控制。使用BlockingQueue封装了根据条件阻塞线程的过程,而我们就不用关心繁琐的await/signal操作了。


这里抛砖引玉,更多内容请参考:http://ifeve.com/java-blocking-queue/。

推荐个juc讲的比较好的博客:http://www.blogjava.net/xylz/archive/2010/07/08/325587.html。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言