阻塞队列
阻塞队列
package com.yishan.patterns.juc.blockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* 先进先出
* 阻塞队列:
* 如果队列里面没有元素,可以进行 存操作 不可以进行 取操作
* 如果队列满了的话, 可以进行 取操作 不可以进行存操作
**/
public class BlockingQueueDemo {
public static void main(String[] args) throws InterruptedException {
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);
//第一组
//放入元素
System.out.println(blockingQueue.add("a"));
System.out.println(blockingQueue.add("b"));
System.out.println(blockingQueue.add("c"));
//取出元素
System.out.println(blockingQueue.remove());
System.out.println(blockingQueue.remove());
System.out.println(blockingQueue.remove());
//总结:add和remove方法 在超出队列大小的范围操作时 会直接抛出异常
//第二组
//存元素
System.out.println(blockingQueue.offer("a"));
System.out.println(blockingQueue.offer("b"));
System.out.println(blockingQueue.offer("c"));
System.out.println(blockingQueue.offer("d"));
//取元素
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());
//总结:offer和poll方法 在超出队列大小的范围操作时 存操作会返回false 取操作会取出null
//第三组
blockingQueue.put("a");
blockingQueue.put("b");
blockingQueue.put("c");
System.out.println(blockingQueue.take());
System.out.println(blockingQueue.take());
System.out.println(blockingQueue.take());
// put和take方法会阻塞等待
//第四组
blockingQueue.offer("a", 3L, TimeUnit.SECONDS);
blockingQueue.offer("b", 3L, TimeUnit.SECONDS);
blockingQueue.offer("c", 3L, TimeUnit.SECONDS);
blockingQueue.poll(3L, TimeUnit.SECONDS);
blockingQueue.poll(3L, TimeUnit.SECONDS);
blockingQueue.poll(3L, TimeUnit.SECONDS);
blockingQueue.poll(3L, TimeUnit.SECONDS);
//offer和poll 方法 可以设定阻塞的超时时间
}
}
本文来自博客园,作者:yishan99,转载请注明原文链接:https://www.cnblogs.com/yishan99/articles/16734331.html

浙公网安备 33010602011771号