阻塞队列4组api
阻塞队列4组api
方式 | 抛出异常 | 有返回值,不抛出异常 | 阻塞 等待 | 阻塞超时 |
---|---|---|---|---|
添加 | add | offer() | put() | offer(e,long time,TimeUnit) |
移除 | remove | poll() | take() | poll(long time,TimeUnit) |
检测队首元素 | element | peek | - | - |
package BlockingQueueA;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* @author liu
*/
public class Demo01 {
public static void main(String[] args) throws InterruptedException {
Test04();
}
/**
* arrayBlockingQueue 队列抛出异常
* add、element、remove
*/
public static void Test01() {
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(BlockingQueue.add("a"));
System.out.println(BlockingQueue.add("b"));
System.out.println(BlockingQueue.add("c"));
//检测队列首元素
BlockingQueue.element();
//IllegalStateException: Queue full
//System.out.println(arrayBlockingQueue.add("d"));
System.out.println("-----------------------------------");
System.out.println(BlockingQueue.remove());
System.out.println(BlockingQueue.remove());
System.out.println(BlockingQueue.remove());
//NoSuchElementException
//System.out.println(arrayBlockingQueue.remove());
}
/**
* arrayBlockingQueue 队列不抛出异常
* offer、peek、poll
*/
public static void Test02() {
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(BlockingQueue.offer("a"));
System.out.println(BlockingQueue.offer("b"));
System.out.println(BlockingQueue.offer("c"));
//不报异常,返回boolean
System.out.println(BlockingQueue.offer("d"));
//检测队列首元素
System.out.println(BlockingQueue.peek());
System.out.println("-----------------------------------");
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
//不报异常,返回null
System.out.println(BlockingQueue.poll());
}
/**
* arrayBlockingQueue 队列一直阻塞
* put、take
*/
public static void Test03() throws InterruptedException {
//队列大小:3
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
BlockingQueue.put("a");
BlockingQueue.put("b");
BlockingQueue.put("c");
//一直阻塞,添加不了
//BlockingQueue.put("d");
System.out.println(BlockingQueue.take());
System.out.println(BlockingQueue.take());
System.out.println(BlockingQueue.take());
//一直阻塞,没有这个元素
//System.out.println(BlockingQueue.take());
}
/**
* arrayBlockingQueue 队列超时退出
* put、take
*/
public static void Test04() throws InterruptedException {
ArrayBlockingQueue BlockingQueue = new ArrayBlockingQueue<>(3);
BlockingQueue.offer("a");
BlockingQueue.offer("b");
BlockingQueue.offer("c");
//等待超时1秒就退出
BlockingQueue.offer("d",1, TimeUnit.SECONDS);
System.out.println("------------------------");
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
System.out.println(BlockingQueue.poll());
//等待超时1秒就退出
BlockingQueue.poll(1,TimeUnit.SECONDS);
}
}