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); + } }