什么场景下使用阻塞队列

Java基础系列

  • Java的hashcode与equals方法

  • Java类初始化顺序

  • ThreadPoolExecutor线程池如何弹性伸缩

  • HashMap的几个要点

  • Integer的缓存

  • 什么场景下使用阻塞队列

  • volatile的使用及DCL模式

  • try-catch-finally中的return

本文主要讲什么场合适合使用阻塞队列。

场景

java.util.concurrent包不仅提供了阻塞队列,还提供了一种容量无限、操作不需要等待、非阻塞的队列ConcurrentLinkedQueue,这些特性听上去非常诱人,那为什么在这个场景下它不是一个好的解决方案呢?

关键在于生产者和消费者可能不会(几乎肯定不会)保持相同的速度,比如,当生产者的速度快于消费者的速度时,队列会越来越大,而且生产对象有40G,很容易就让队列大小超过内存容量。

相比之下,阻塞队列只允许生产者的速度在一定速度上超过消费者的速度,但不会超过很多。

你可能感兴趣的:(多线程,java)