package com.my.demo;
import java.util.concurrent.LinkedBlockingQueue;
public class DemoTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedBlockingQueue<String> lbqueue;
lbqueue = new LinkedBlockingQueue<String>(20);
// 1、add 方法:队列已满,报java.lang.IllegalStateException: Queue full 错误
System.out.println("-----add-----");
for (int i = 0; i < 5; i++) {
lbqueue.add(String.valueOf(i));
}
System.out.println("size:"+lbqueue.size());
// 2、offer 方法,队列已满,程序正常运行,只是不再新增元素
System.out.println("-----offer-----");
for (int i = 0; i < 20; i++) {
lbqueue.offer(String.valueOf(i));
}
System.out.println("size:"+lbqueue.size());
System.out.println("-----poll-----");
// 3、poll 方法,弹出队顶元素,队列为空时返回null
for (int i = 0; i < 6; i++) {
String e = lbqueue.poll();
System.out.println("poll:" + e);
}
System.out.println("size:" + lbqueue.size());
System.out.println("-----peek-----");
// 4、peek 方法,返回队列顶元素,但顶元素不弹出,队列为空时返回null
for (int i = 0; i < 5; i++) {
String e = lbqueue.peek();
System.out.println("peek:" + e);
}
System.out.println("size:" + lbqueue.size());
System.out.println("-----take-----");
// 5、take 方法,当队列为空,阻塞
for (int i = 0; i < 10; i++) {
String e = null;
try {
e = lbqueue.take();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("take:" + e);
}
System.out.println("size:" + lbqueue.size());
System.out.println("-----put-----");
// 6、put 方法,当队列满时,阻塞
for (int i = 0; i < 30; i++) {
try {
String e = String.valueOf(i);
lbqueue.put(e);
System.out.println("put:" + e);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
System.out.println("size:" + lbqueue.size());
}
}
运行结果:
-----add-----
size:5
-----offer-----
size:20
-----poll-----
poll:0
poll:1
poll:2
poll:3
poll:4
poll:0
size:14
-----peek-----
peek:1
peek:1
peek:1
peek:1
peek:1
size:14
-----take-----
take:1
take:2
take:3
take:4
take:5
take:6
take:7
take:8
take:9
take:10
size:4
-----put-----
put:0
put:1
put:2
put:3
put:4
put:5
put:6
put:7
put:8
put:9
put:10
put:11
put:12
put:13
put:14
put:15