一、堵塞队列
Java定义了堵塞队列的接口java.util.concurrent.BlockingQueue,堵塞队列是一个指定长度的队列,当试图向队列中添加元素而队列已满,或者是想从队列移出元素而队列为空的时候,堵塞队列导致线程堵塞。
在协调多个线程之间的合作时,堵塞队列是一个有用的工具。
堵塞队列的方法分为三类,取决于当队列满或空时它们的相应方式。
1、如果将队列当作线程管理工具使用,用到put()(添加一个元素)和take()(移出并返回头元素)方法。
2、当试图向满的队列中添加或从从空的队列中移出元素时,用到add()、remove()(移出并返回头元素)、element()(返回队列的头元素)。
3、在一个线程中,队列会在任何时候空或满时,用offer()(添加一个元素并返回true)、poll()(移出并返回队列的头元素)、peek()(返回队列的头元素)替代。这些方法如果不能完成任务,不会抛出异常,只会给出一个错误。
简单的例子:
QueueTest.java
1 package Thread; 2 3 import java.util.concurrent.ArrayBlockingQueue; 4 import java.util.concurrent.BlockingQueue; 5 6 public class QueueTest { 7 public static void main(String[] args)throws InterruptedException{ 8 BlockingQueue bqueue=new ArrayBlockingQueue(20); 9 for (int i=0;i<30;i++){ 10 bqueue.put(i); 11 System.out.println("向堵塞队列中添加了元素:"+i); 12 } 13 System.out.println("程序运行结束,即将退出---"); 14 } 15 }
结果为:
原文:http://www.cnblogs.com/liuzhongfeng/p/5068458.html