From e3715431412dc359b80bbc3022806a18d7ca8790 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Mon, 20 Jan 2025 21:28:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20PriorityBlockingQueue=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README/Java并发容器使用.md | 44 +++++++++++++++++++ .../java/cn/bunny/atomic/AtomicExample06.java | 13 ++++++ 2 files changed, 57 insertions(+) create mode 100644 README/Java并发容器使用.md diff --git a/README/Java并发容器使用.md b/README/Java并发容器使用.md new file mode 100644 index 0000000..9c9c0aa --- /dev/null +++ b/README/Java并发容器使用.md @@ -0,0 +1,44 @@ +# Java并发容器使用 + +## ArrayBlockingQueue使用 + +```java +ArrayBlockingQueue queue = new ArrayBlockingQueue<>(8); + +// 阻塞添加 +queue.add("1"); +queue.add("2"); +queue.add("3"); +System.out.println(queue); + +// 非阻塞添加 +queue.put("4"); +queue.put("5"); +System.out.println(queue); + +// 阻塞添加,但队列满不会进入阻塞 +queue.offer("6"); +queue.offer("7"); +System.out.println(queue); + +// 指定时间内进入阻塞 +queue.offer("8", 3, TimeUnit.SECONDS); +queue.offer("9", 3, TimeUnit.SECONDS);// 8个队列满,不会进入阻塞 +System.out.println(queue); + +// 从头部获取数据并移出,如果队列为空进入阻塞直到有数据添加 +String take = queue.take(); +System.out.println(take); + +// 获取数据并移出队列第一个元素,如果队列为空将会阻塞指定的时间,直到在此期间有新数据写入,或者当前线程被其他线程中断,当线程超时会返回null +String poll = queue.poll(3, TimeUnit.SECONDS); +System.out.println(poll); + +// 从头部获取数据并移出,如果队列为空不会阻塞 +String poll1 = queue.poll(); +System.out.println(poll1); + +// 从头部获取数据不会移除,队列为空不会阻塞直接返回null +String peek = queue.peek(); +System.out.println(peek); +``` \ No newline at end of file diff --git a/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample06.java b/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample06.java index 927743c..872405f 100644 --- a/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample06.java +++ b/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample06.java @@ -1,4 +1,17 @@ package cn.bunny.atomic; +import java.util.concurrent.PriorityBlockingQueue; + public class AtomicExample06 { + public static void main(String[] args) { + // 无边界队列,可以定义初始容量并不是最大容量 + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(2); + System.out.println(queue); + + // 队列的添加方法都等于offer方法 + queue.offer(1); + queue.offer(10); + queue.offer(3); + System.out.println(queue); + } }