BlockingQueue是FIFO(先进先出)型队列,他很好的解决了多线程中,如何高效安全“传输”数据的问题。本文会介绍BlockingQueue常用的四组api以及他们之间的不同之处。
方式返回布尔,抛出异常返回布尔,不抛出异常阻塞,一直等待阻塞,超时等待
方式返回布尔,抛出异常返回布尔,不抛出异常阻塞,一直等待阻塞,超时等待
添加add(e)offer(e)put(e)offer(e, timeout, unit)
移出remove( )poll( )take( )poll(timeout, unit)
返回队首元素element( )peek( )––
————————————————
返回布尔,抛出异常:
// 容量大小为3
ArrayBlockingQueue<String> blockingQueue = new ArrayBlockingQueue<String>(3);
// add() 向队列添加元素,返回布尔值
System.out.println(blockingQueue.add("a"));
System.out.println(blockingQueue.add("b"));
System.out.println(blockingQueue.add("c"));
// 超过容量,抛异常 IllegalStateException: Queue full
//System.out.println(blockingQueue.add("d"));
// 返回队首元素
System.out.println("top = " + blockingQueue.element());
System.out.println("-------------");
System.out.println(blockingQueue.remove());
System.out.println(blockingQueue.remove());
System.out.println(blockingQueue.remove());
// 无元素,抛异常 NoSuchElementException
//System.out.println(blockingQueue.remove());
// 返回队首元素,抛异常 NoSuchElementException
//System.out.println("top = " + blockingQueue.element());