public class Test5 {
//阻塞队列第一种方法:允许抛异常
@Test
public void test1() {
//阻塞队列
//构造器参数为阻塞队列最大长度
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);
//1.1使用add方法,当添加的元素超过队列最大长度之后,如果继续添加,那么抛出异常IllegalStateException
queue.add(1);
queue.add(1);
queue.add(1);
// queue.add(1);
//1.2使用remove,按照正常队列出队顺序移除元素,当没有元素能移除时报错,抛出NoSuchElementException异常
queue.remove();
queue.remove();
queue.remove();
// queue.remove();
}
//阻塞队列第二种方法,不抛异常,用返回值反馈
@Test
public void test2() {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);
//2.1使用offer方法,当添加数据操作索引长度返回false,否则返回true
System.out.println(queue.offer(1));
System.out.println(queue.offer(1));
System.out.println(queue.offer(1));
System.out.println(queue.offer(1));
//2.2使用poll方法,当阻塞队列没有数据,返回空
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
}
//阻塞队列第三种方法,阻塞
@Test
public void test3() throws InterruptedException {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);
//3.1使用put方法添加数据,当数据满了之后,添加操作被阻塞,等到有空位了之后继续执行
queue.put(1);
queue.put(1);
queue.put(1);
// queue.put(1);
//3.2使用take方法弹出数据,当队列空了之后,弹出操作被阻塞,等有了数据之后继续执行
System.out.println(queue.take());
System.out.println(queue.take());
System.out.println(queue.take());
// System.out.println(queue.take());
}
//阻塞队列第四种方法,不抛异常,用返回值反馈
@Test
public void test4() throws InterruptedException {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);
//4.1使用offer方法,第一个数据为添加的数据,第二个参数为最大阻塞时间大小,第三个为单位。当超过时间,直接返回false
System.out.println(queue.offer(1));
System.out.println(queue.offer(1));
System.out.println(queue.offer(1));
System.out.println(queue.offer(1,2, TimeUnit.SECONDS));
//4.2使用poll方法,弹出队列第一个数据,第一个参数为最大阻塞时间,第二个为单位,当超出时间,直接返回null
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll(2,TimeUnit.SECONDS));
}
}
JUC——阻塞队列四套API使用
最新推荐文章于 2023-09-02 19:55:32 发布