java LinkedBlockingQueue的用法

参考:https://blog.csdn.net/caideb/article/details/81477631

1.加入元素,包含三种方式  put  add  offer

put 加入元素的时候如果队列已满则会阻塞等待

`
1. final LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
3. for (int i = 0; i < 3; i++) {
4. System.out.println("add "+i);
5. try {
6. queue.put(i + "");
7. } catch (InterruptedException e) {
8. // TODO Auto-generated catch block
9. e.printStackTrace();
10. }
12. }
14. System.out.println("over...");
`
`
1. add 0
2. add 1
3. add 2
`

add加入元素的时候如果队列已满则会抛出异常

`
1. final LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
3. for (int i = 0; i < 3; i++) {
4. System.out.println("add "+i);
5. queue.add(i + "");
6. }
8. System.out.println("over...");
`
`
1. add 0
2. add 1
3. add 2
4. Exception in thread "main" java.lang.IllegalStateException: Queue full
5. at java.util.AbstractQueue.add(AbstractQueue.java:98)
6. at testqueue.test.main(test.java:50)
`

offer加入元素的时候如果队列已满则会返回false

`
1. final LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
3. for (int i = 0; i < 3; i++) {
4. System.out.println("add "+i);
5. System.out.println(queue.offer(i + ""));;
6. }
8. System.out.println("over...");
`
`
1. add 0
2. true
3. add 1
4. true
5. add 2
6. false
7. over...
`

2.去除元素,包含三种方式take remove poll

take 如果队列为空则会阻塞等待

`
1. final LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
3. System.out.println("waiting for take 。。。");
4. try {
5. System.out.println("remove " + queue.take());
6. } catch (InterruptedException e) {
7. // TODO Auto-generated catch block
8. e.printStackTrace();
9. }
10. System.out.println("take over。。。");
`
`waiting for take 。。。`

remove 如果队列为空则会抛出异常

`
1. final LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
3. System.out.println("waiting for remove 。。。");
4. System.out.println("remove " + queue.remove());
5. System.out.println("remove over。。。");
`
`
1. waiting for remove 。。。
2. Exception in thread "main" java.util.NoSuchElementException
3. at java.util.AbstractQueue.remove(AbstractQueue.java:117)
4. at testqueue.test.main(test.java:49)
`

poll 如果队列为空会返回null

`
1. final LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(2);
3. System.out.println("waiting for poll 。。。");
4. System.out.println("remove " + queue.poll());
5. System.out.println("poll over。。。");
`
`
1. waiting for poll 。。。
2. remove null
3. poll over。。。
`
  狂客  阅读(236)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
历史上的今天:
2021-11-11 ssm整合
点击右上角即可分享
微信分享提示