一)背景
在编写springboot邮件篇章的时候,就在想邮件直接发送中失败了该怎么办等问题。就想到用队列的方式去存储邮件,所以就重新了解了一下java自带的一些队列,以此记录一下。
二)ArrayBlockingQueue是一个由数组支持的有界队列
package com.oysept.springboot.test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
/**
* ArrayBlockingQueue是一个由数组支持的有界队列
* ArrayBlockingQueue一定需要初始化指定一个大小,不然会报错
* ArrayBlockingQueue可以选择是否需要公平性,如果公平参数ReentrantLock被设置true,等待时间最长的线程会优先得到处理
* @author ouyangjun
*/
public class ArrayQueue {
/**
* 初始化
*/
final BlockingQueue<Object> arrayBlockingQueue = new ArrayBlockingQueue<Object>(5);
/**
* 生产者
* ArrayBlockingQueue中有add、offer和put三种添加值的方式,但有一点差别。
* add 添加一个元索时, 如果队列已满,则抛出一个IIIegaISlabEepeplian异常。
* offer 添加一个元素时, 会返回true。如果队列已满,则返回false。true表示添加成功,false添加失败。
* put 添加一个元素时, 如果队列已满,则阻塞。
* @param obj
* @throws InterruptedException
*/
public void producer(Object obj) throws InterruptedException {
arrayBlockingQueue.put(obj);
}
/**
* remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常。
* element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常。
* poll 移除并返问队列头部的元素 如果队列为空,则返回null。
* peek 返回队列头部的元素 如果队列为空,则返回null。
* take 移除并返回队列头部的元素 如果队列为空,则阻塞。
* 注意:poll和peek方法报错返回null 在队列中插入null值是不合法的。
* @param obj
* @return