# 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); ``` ## PriorityBlockingQueue使用 ```java // 无边界队列,可以定义初始容量并不是最大容量 PriorityBlockingQueue queue = new PriorityBlockingQueue<>(2); System.out.println(queue); // 队列的添加方法都等于offer方法 queue.offer(1); queue.offer(10); queue.offer(3); System.out.println(queue); ``` ## LinkedBlockingQueue使用 ```java // 属于可选边界 LinkedBlockingQueue integers = new LinkedBlockingQueue<>(10); boolean b = integers.remainingCapacity() == 10; System.out.println(b); // 等于定义的 LinkedBlockingQueue integers1 = new LinkedBlockingQueue<>(); boolean b1 = integers1.remainingCapacity() == Integer.MAX_VALUE; System.out.println(b1); ```