20220210 java.util.concurrent.BlockingQueue 方法说明
2022/2/10 22:13:51
本文主要是介绍20220210 java.util.concurrent.BlockingQueue 方法说明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
方法对比
抛出异常 | 特殊值 | 阻塞 | 超时 | |
---|---|---|---|---|
插入 | add(e) |
offer(e) |
put(e) |
offer(e, time, unit) |
移除 | remove() |
poll() |
take() |
poll(time, unit) |
检查 | element() |
peek() |
不可用 | 不可用 |
方法声明
// 添加元素方法 boolean add(E e); boolean offer(E e); boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException; void put(E e) throws InterruptedException; // 移除元素方法 boolean remove(Object o); E remove(); E poll(); E poll(long timeout, TimeUnit unit) throws InterruptedException; E take() throws InterruptedException; // 检查元素方法 E element(); E peek();
- 注意方法的参数、返回值和抛出异常
remove
方法有两个重载方法,一个有入参,返回boolean
;另一个没有入参,返回队列里的元素- 方法声明上有抛出
InterruptedException
异常的方法,意思不是指超时后抛出此异常,而是指接收到中断信号后抛出此异常
代码示例
public class BlockingQueueDemo { private static BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3); public static void main(String[] args) { // add、offer、put // testAdd(); // testOffer(); // testPut(); // remove、poll、take // testRemove(); // testRemoveNoArg(); // testPoll(); // testTake(); // element、peek // testElement(); // testPeek(); // 测试中断异常 testInterruptedException(); System.out.println(blockingQueue); } private static void testInterruptedException() { Thread thread = new Thread(() -> { try { blockingQueue.put("a"); System.out.println("添加成功 a"); blockingQueue.put("b"); System.out.println("添加成功 b"); blockingQueue.put("c"); System.out.println("添加成功 c"); blockingQueue.put("d"); System.out.println("添加成功 d"); } catch (InterruptedException e) { System.out.println("抛出异常"); System.err.println(e); // java.lang.InterruptedException e.printStackTrace(); // java.lang.InterruptedException } }); thread.start(); try { TimeUnit.SECONDS.sleep(5); thread.interrupt(); System.out.println("线程中断"); } catch (InterruptedException e) { e.printStackTrace(); } } private static void testElement() { System.out.println(blockingQueue.element()); // a // 阻塞队列为空时,抛出异常 java.util.NoSuchElementException System.out.println(blockingQueue.element()); // a System.out.println(blockingQueue.element()); // a } private static void testPeek() { System.out.println(blockingQueue.peek()); // a // 阻塞队列为空时,返回 null System.out.println(blockingQueue.peek()); // a System.out.println(blockingQueue.peek()); // a } private static void testRemove() { blockingQueue.remove("a"); blockingQueue.remove("b"); System.out.println(blockingQueue.remove("c")); // true System.out.println(blockingQueue.remove("d")); // false } private static void testRemoveNoArg() { System.out.println(blockingQueue.remove()); // a System.out.println(blockingQueue.remove()); // b System.out.println(blockingQueue.remove()); // c System.out.println(blockingQueue.remove()); // java.util.NoSuchElementException } private static void testPoll() { System.out.println(blockingQueue.poll()); // a System.out.println(blockingQueue.poll()); // b System.out.println(blockingQueue.poll()); // c System.out.println(blockingQueue.poll()); // null try { System.out.println(blockingQueue.poll(5, TimeUnit.SECONDS)); // null // 阻塞5s } catch (InterruptedException e) { e.printStackTrace(); } } private static void testTake() { try { System.out.println(blockingQueue.take()); System.out.println(blockingQueue.take()); System.out.println(blockingQueue.take()); System.out.println(blockingQueue.take()); // 线程阻塞 } catch (InterruptedException e) { e.printStackTrace(); } } private static void testAdd() { blockingQueue.add("a"); blockingQueue.add("b"); System.out.println(blockingQueue.add("c")); // true // System.out.println(blockingQueue.add("d")); // java.lang.IllegalStateException: Queue full } private static void testOffer() { blockingQueue.offer("a"); blockingQueue.offer("b"); System.out.println(blockingQueue.offer("c")); // true System.out.println(blockingQueue.offer("d")); // false try { System.out.println(blockingQueue.offer("e", 5, TimeUnit.SECONDS)); // false // 阻塞5s } catch (InterruptedException e) { e.printStackTrace(); } } private static void testPut() { try { blockingQueue.put("a"); System.out.println("插入完成 a"); blockingQueue.put("b"); System.out.println("插入完成 b"); blockingQueue.put("c"); System.out.println("插入完成 c"); blockingQueue.put("d"); // 线程阻塞 System.out.println("插入完成 d"); } catch (InterruptedException e) { e.printStackTrace(); } } }
这篇关于20220210 java.util.concurrent.BlockingQueue 方法说明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)