阻塞队列
BlockingQueue
我们常用其实现类:ArrayBlockingQueue
LinkedBlockingQueue
…
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<String>(3);//参数:队列大小
有四种API(四组对应重载方法):
操作/方法 | 抛出异常 | 不抛出异常,有返回值 | 一直阻塞,等待 | 超时等待 |
---|---|---|---|---|
添加 | add("") | offer("") | put("") | offer(值,时间, 时间单位) |
移除 | remove() | poll() | take() | poll(时间, 时间单位) |
查看队列首 | element() | peek() | ---------- | ---------- |
抛出异常
public class Test01 {
public static void main(String[] args) {
test1();
}
/**
* 抛出异常
*/
public static void test1(){
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<String>(3);//参数:队列大小
//添加 返回值 是否插入成功 true==成功
System.out.println(blockingQueue.add("-1"));
System.out.println(blockingQueue.add("-2"));
System.out.println(blockingQueue.add("-3"));
//现在 添加第四个 超出了队列大小 异常Exception in thread "main" java.lang.IllegalStateException: Queue full
//System.out.println(blockingQueue.add("-4"));
//查看队首
System.out.println(blockingQueue.element());
//移除-取出 移除方式 先进先出 即 -1 > -2 > -3 返回值 被移除的对象
System.out.println(blockingQueue.remove());
System.out.println(blockingQueue.remove());
System.out.println(blockingQueue.remove());
//现在 取出一个不存在的 异常Exception in thread "main" java.util.NoSuchElementException
//System.out.println(blockingQueue.remove());
}
}
//正常运行
true
true
true
-1
-1
-2
-3
仅有返回值
public class Test01 {
public