java多线程ArrayBlockingQueue阻塞队列
Posted 500年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程ArrayBlockingQueue阻塞队列相关的知识,希望对你有一定的参考价值。
java多线程ArrayBlockingQueue阻塞队列
方法 | 跑出异常 | 有返回值,不抛异常 | 阻塞 等等 | 超时等等 |
---|---|---|---|---|
添加 | add | offer | put | offe(,) |
移除 | remove | poll | take | poll(,) |
检测队首元素 | element | peek | - | - |
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
public class ArrayBlockingQueueDemo {
public static void main(String[] args) {
System.out.println("第一组:===================");
ArrayBlockingQueue<String> abq = new ArrayBlockingQueue<>(3);
try {
abq.add("a");
abq.add("b");
abq.add("c");
abq.add("d");// 报异常
} catch (Exception e) {
e.printStackTrace();
}
String fe = abq.element();// 检测队首元素
System.out.println("队首元素:" + fe);
try {
System.out.println(abq.remove());
System.out.println(abq.remove());
System.out.println(abq.remove());
System.out.println(abq.remove());// 报异常
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("第二组:===================");
ArrayBlockingQueue<String> abq2 = new ArrayBlockingQueue<>(3);
abq2.offer("aa");
abq2.offer("bb");
abq2.offer("cc");
abq2.offer("dd");// 返回false
String peek = abq2.peek();// 检测队首元素
System.out.println("队首元素:" + peek);
System.out.println(abq2.poll());
System.out.println(abq2.poll());
System.out.println(abq2.poll());
System.out.println(abq2.poll());// 返回null
// System.out.println("第三组:===================");
//
// try {
// ArrayBlockingQueue<String> abq3 = new ArrayBlockingQueue<>(3);
// abq3.put("aaa");
// abq3.put("bbb");
// abq3.put("ccc");
// abq3.put("ddd");// 一直阻塞,死等
//
// System.out.println(abq3.take());
// System.out.println(abq3.take());
// System.out.println(abq3.take());
// System.out.println(abq3.take());// 一直阻塞,死等
// } catch (Exception e) {
// e.printStackTrace();
// }
System.out.println("第四组:===================");
try {
ArrayBlockingQueue<String> abq4 = new ArrayBlockingQueue<>(3);
abq4.offer("aaaa", 2, TimeUnit.SECONDS);
abq4.offer("bbbb", 2, TimeUnit.SECONDS);
abq4.offer("cccc", 2, TimeUnit.SECONDS);
abq4.offer("dddd", 2, TimeUnit.SECONDS);
System.out.println(abq4.poll(2, TimeUnit.SECONDS));
System.out.println(abq4.poll(2, TimeUnit.SECONDS));
System.out.println(abq4.poll(2, TimeUnit.SECONDS));
System.out.println(abq4.poll(2, TimeUnit.SECONDS));
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
第一组:===================
java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312)
at com.asia.tip.tcpchat.ArrayBlockingQueueDemo.main(ArrayBlockingQueueDemo.java:17)
队首元素:a
a
b
c
java.util.NoSuchElementException
at java.util.AbstractQueue.remove(AbstractQueue.java:117)
at com.asia.tip.tcpchat.ArrayBlockingQueueDemo.main(ArrayBlockingQueueDemo.java:28)
第二组:===================
队首元素:aa
aa
bb
cc
null
第四组:===================
aaaa
bbbb
cccc
null
特别鸣谢:狂神说Java老师的无私奉献
.
.
.
上一篇 java多线程(四)ReadWriteLock读写锁
下一篇 java多线程(六) SynchronousQueue同步队列
以上是关于java多线程ArrayBlockingQueue阻塞队列的主要内容,如果未能解决你的问题,请参考以下文章
JUC多线程:阻塞队列ArrayBlockingQueue与LinkedBlockingQueue
多线程(十八阻塞队列-ArrayBlockingQueue)