阻塞队列

阻塞队列

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 方法   可以设定阻塞的超时时间

    }


}

posted @ 2022-09-27 13:55  yishan99  阅读(22)  评论(0)    收藏  举报