Queue描述的是一个队列,而队列的主要特点是实现先进先出的操作形式。其基本的操作形式如下:
如果将队列应用在多线程的“生产者与消费者”的模型处理上,那么对于生产者过快的情况下,就没有必要等待消费者或者数据了,可以将所有的内容保存在队列之中,队列的实现可以使用LinkedList子类来完成,观察这个类的定义:
队列的使用主要依靠Queue接口之中提供的方法来处理,提供有如下方法:
向队列中追加数据:boolean offer(E e),可以直接使用add()方法;
通过队列获取数据:public E poll(),弹出后删除数据。
范例:实现队列操作
package cn.mldn.demo;
import java.util.LinkedList;
import java.util.Queue;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Queue<String> queue = new LinkedList<String>();
queue.add("X");//追加队列数据,通过队尾追加
queue.offer("A");//追加队列数据,通过队尾追加
queue.offer("Z");//追加队列数据,通过队尾追加
System.out.println(queue.poll());//X
System.out.println(queue.poll());//A
System.out.println(queue.poll());//Z
System.out.println(queue.poll());//null
}
}
除了LinkedList子类以外,还有一个优先级队列的概念,可以使用PriorityQueue实现优先级队列。这个类的定义如下:
public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable
public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E>
public abstract class AbstractCollection<E> extends Object implements Collection<E>
范例:使用优先级队列
package cn.mldn.demo;
import java.util.PriorityQueue;
import java.util.Queue;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Queue<String> queue=new PriorityQueue<String>();
queue.offer("X");//追加队列数据,通过队尾追加
queue.offer("A");//追加队列数据,通过队尾追加
queue.offer("Z");//追加队列数据,通过队尾追加
System.out.println(queue.poll());//A
System.out.println(queue.poll());//X
System.out.println(queue.poll());//Z
}
}
对于队列的选用原则也是需要根据实际的项目环境来决定的。