diff --git a/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample05.java b/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample05.java index 417928e..fdd17cb 100644 --- a/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample05.java +++ b/multithreading1/src/main/java/cn/bunny/atomic/AtomicExample05.java @@ -1,4 +1,47 @@ package cn.bunny.atomic; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.TimeUnit; + public class AtomicExample05 { + public static void main(String[] args) throws InterruptedException { + 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); + } }