阻塞队列
BlockingQueue关系 等
实现类
BlockingQueue四组API
- 抛出异常
- 不会抛出异常
- 阻塞等待
- 超时等待
方式 | 抛出异常 | 有返回值,不会抛出异常 | 阻塞等待 | 超时等待 |
---|---|---|---|---|
添加 | add() | offe()r | put() | offer(object , long , TimeUnit) |
移除 | remove() | poll() | take() | poll(long , TimeUnit) |
检测队首元素 | element() | peek() | - | - |
例子:
package JUC;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
public class BlockingQueueTest {
public static void main(String[] args) {
try {
test8();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 抛出异常 java.lang.IllegalStateException: Queue full
*/
public static void test1() {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
System.out.println(queue.add("a"));
System.out.println(queue.add("b"));
System.out.println(queue.add("c"));
System.out.println(queue.element());
System.out.println(queue.add("d"));
}
/**
* 抛出异常 java.util.NoSuchElementException
*/
public static void test2() {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
System.out.println(queue.element());
System.out.println(queue.remove());
}
/**
* 有返回值,不会抛出异常 返回布尔值 false
*/
public static void test3() {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
System.out.println(queue.offer("a"));
System.out.println(queue.offer("b"));
System.out.println(queue.offer("c"));
System.out.println(queue.peek());
System.out.println(queue.offer("d"));
}
/**
* 有返回值,不会抛出异常 返回null
*/
public static void test4() {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
System.out.println(queue.poll());
}
/**
* 阻塞等待 一直等待
*/
public static void test5() throws InterruptedException {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
queue.put("A");
queue.put("b");
queue.put("c");
queue.put("d");
}
/**
* 阻塞等待 一直等待
*/
public static void test6() throws InterruptedException {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
queue.take();
}
/**
* 超时退出
*/
public static void test7() throws InterruptedException {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
queue.offer("A");
queue.offer("b");
queue.offer("c");
queue.offer("d", 1, TimeUnit.SECONDS);
}
/**
* 超时退出
*/
public static void test8() throws InterruptedException {
//队列的大小
BlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
queue.poll(3, TimeUnit.SECONDS);
}
}