Queue队列
其接口定义为:
public interface Queue<E> extends Collection<E> {
//获取但不移除队列头,
E element();
//添加元素到队尾
boolean offer(E o);
//获取但不移除队列头的元素
E peek();
//移除对头元素
E poll();
//移除对头元素
E remove();
}
- Queue的主要特征为FIFO(先进先出)一般不允许插入null,除了LinkedList是个例外,其允许插入null。
- 当Queue的元素已经到达限制数目时,add会抛出 IllegalStateException异常,offer会返回false。
- 当Queue为空时,remove抛出NoSuchElementException异常,而poll返回null。
- element和peek返回但不删除Queue中的头元素,它们的区别类似remove与poll。
BlockingQueue和CountDownlatch
- BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量:
当容量为满时往BlockingQueue里添加元素时会阻塞。
当容量为空时从BlockingQueue里取出元素时会阻塞。
其两个常用子类是ArrayBlockingQueue和LinkedBlockingQueue。
- CountDownlatch 是一个同步辅助类,当一个线程对Queue操作完成之前,其他要对Queue操作的线程进入阻塞。排队等待。主要方法有:
public CountDownLatch(count);
public void countDown();
public void await() ;
构造方法设置了计数的次数,countDown方法,当前的计数减一,await方法,调用该方法会一直阻塞当前线程,直至计数为0 ;
网友评论