LinkedBlockingQueue的3对易混API
作者:互联网
目录
3对API结论
Level. | 放入 | 取出 | ||
---|---|---|---|---|
1 | add | 队列满?异常 :return true | remove | 队列空?异常 :return head |
2 | offer | 队列满?return false:return true | poll | 队列空?return null:return head |
3 | put | 队列满?阻塞:return [void] | take | 队列空?阻塞:return head |
放入测试
public static void main(String[] args) throws Exception {
new Thread(() -> {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
try {
queue.put("1");
queue.put("1"); //满时阻塞
System.out.println("不打印我");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
System.out.println("offer1"+queue.offer("1"));
System.out.println("offer2"+queue.offer("1"));//满时返回false
}).start();
new Thread(() -> {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
System.out.println("add1"+queue.add("1"));
System.out.println("add2"+queue.add("1"));//满时异常
}).start();
}
offer1true
offer2false
add1true
Exception in thread "Thread-2" java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at com.construn.vehicle.common.core.monitor.App.lambda$main$2(App.java:30)
at com.construn.vehicle.common.core.monitor.App$$Lambda$3/1982791261.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
public static void main(String[] args) throws Exception {
new Thread(() -> {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(Lists.newArrayList("AAA"));
try {
System.out.println("take1"+queue.take());
System.out.println("take2"+queue.take()); //空时阻塞
System.out.println("不打印我");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(Lists.newArrayList("AAA"));
System.out.println("poll1"+queue.poll());
System.out.println("poll2"+queue.poll());//空时返回null
}).start();
new Thread(() -> {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(Lists.newArrayList("AAA"));
System.out.println("remove1"+queue.remove());
System.out.println("remove2"+queue.remove());//空时异常
}).start();
}
remove1AAA
poll1AAA
poll2null
take1AAA
Exception in thread "Thread-2" java.util.NoSuchElementException
at java.util.AbstractQueue.remove(AbstractQueue.java:117)
at com.construn.vehicle.common.core.monitor.App.lambda$main$2(App.java:54)
at com.construn.vehicle.common.core.monitor.App$$Lambda$3/1982791261.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
标签:Thread,LinkedBlockingQueue,System,queue,API,println,new,对易,out 来源: https://blog.csdn.net/qq_39506978/article/details/113986914