1.消息队列
四组API
方式 | 抛出异常 | 不会抛出异常,有返回值 | 阻塞等待 | 超时等待 |
---|---|---|---|---|
添加操作 | add() | offer() 供应 | put() | offer(obj,int,timeunit.status) |
移除操作 | remove() | poll() 获得 | take() | poll(int,timeunit.status) |
判断队列首部 | element() | peek() 偷看,偷窥 |
public static void main(String[] args) throws InterruptedException {
ArrayBlockingQueue queue = new ArrayBlockingQueue<>(2);
// System.out.println(queue.add("a"));
// System.out.println(queue.add("g"));
// System.out.println("=============================");
// System.out.println(queue.remove());
// System.out.println(queue.remove());
// System.out.println(queue.offer("a"));
// System.out.println(queue.offer("b"));
// System.out.println("取出队列第一个元素"+queue.peek());
// // System.out.println(queue.offer("a"));
// System.out.println(queue.poll());
// System.out.println(queue.poll());
// queue.put("a");
// queue.put("b");
// //queue.put("c"); //队列没有位置就会阻塞
// System.out.println(queue.take());
// queue.put("c");
// System.out.println(queue.take());
System.out.println(queue.offer("a"));
System.out.println(queue.offer("b"));
System.out.println(queue.offer("d",2, TimeUnit.SECONDS));
System.out.println("取出队列第一个元素"+queue.peek());
// System.out.println(queue.offer("a"));
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll(3,TimeUnit.SECONDS));
}
2.SynchronizedQueue 同步队列
进去一个元素,必须等待取出来之后,才能再往里面放一个元素
public static void main(String[] args) {
SynchronousQueue<Object> queue = new SynchronousQueue<>();
new Thread(()->{
try {
System.out.println(Thread.currentThread().getName()+ "put aaaaaaa");
queue.put("AAAAAAAA");
System.out.println(Thread.currentThread().getName()+ "put bbbbbbbbb");
queue.put("BBBBBBBB");
System.out.println(Thread.currentThread().getName()+ "put cccccccccc");
queue.put("CCCCCCCCC");
} catch (InterruptedException e) {
e.printStackTrace();
}
},"T1").start();
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + "=>" + queue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName()+ "=>" + queue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName()+ "=>" + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
},"T2").start();
}