ArrayBlockingQueue<String> ints = new ArrayBlockingQueue<String>(2,true);
// // java.lang.IllegalStateException: Queue full
// System.out.println(ints.add("a"));
// System.out.println(ints.add("b"));
// System.out.println(ints.add("c"));
// true or false , not block
System.out.println(ints.offer("a"));
System.out.println(ints.offer("b"));
System.out.println(ints.offer("c"));
// block and wait when full
// ints.put("1");
// ints.put("2");
// ints.put("3");
// // <--> add,java.util.NoSuchElementException
// System.out.println("remove::"+ints.remove());;
// System.out.println("remove::"+ints.remove());;
// System.out.println("remove::"+ints.remove());;
// // <--> offer, return null when empty
// System.out.println("poll::"+ints.poll());
// System.out.println("poll::"+ints.poll());
// System.out.println("poll::"+ints.poll());
// System.out.println("poll::"+ints.poll(10, TimeUnit.MILLISECONDS));
// <-->put, block when empty
System.out.println("take::"+ints.take());
System.out.println("take::"+ints.take());
System.out.println("take::"+ints.take());