阻塞队列

阻塞队列

为什么需要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();

    }

}

全部评论

相关推荐

10-15 03:05
门头沟学院 Java
CADILLAC_:凯文:我的邮箱是死了吗?
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务