阻塞队列

阻塞队列

为什么需要BlockingQueue?

​ 不需要关心什么时候阻塞线程,什么时候唤醒线程。

阻塞队列用在哪?

  • 生产者消费者模式
  • 线程池
  • 消息中间件

BlockingQueue 的几个 API

1630478698953

SynchronousQueue

是什么?

SynchronousQueue 是 一个不存储元素的阻塞队列,也就是说,只有当一个线程put进去后,别的线程get出来后才能继续put。

public class BlockingQueue {

    public static void main(String[] args) throws InterruptedException {

        SynchronousQueue<Integer> synchronousQueue = new SynchronousQueue<>();

        new Thread(()->{
            try {
                synchronousQueue.put(1);
                System.out.println(Thread.currentThread().getName()+"\t添加元素"+1);
                synchronousQueue.put(2);
                System.out.println(Thread.currentThread().getName()+"\t添加元素"+2);
                synchronousQueue.put(3);
                System.out.println(Thread.currentThread().getName()+"\t添加元素"+3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },"t1").start();


        new Thread(()->{

            try {
                System.out.println(Thread.currentThread().getName()+"\t获取元素"+synchronousQueue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //过三秒再获取元素
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            try {
                System.out.println(Thread.currentThread().getName()+"\t获取元素"+synchronousQueue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //过三秒再获取元素
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            try {
                System.out.println(Thread.currentThread().getName()+"\t获取元素"+synchronousQueue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },"t2").start();

    }

}

全部评论

相关推荐

昨天 17:22
已编辑
西安交通大学 Java
华为 昇腾 ai软件开发 薪资20k x (14-16),职级13A,5%公积金,c/cpp
BLOOMING7:闭眼滴滴,华子给的又少又累
点赞 评论 收藏
分享
qz鹿:*** 祝他毕业就失业
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务