队列,先进先出~
阻塞
什么是阻塞?
1、这个队列是线程安全的(内部进行了加锁控制)。
2、当队列满的时候,往队列里插元素,就会阻塞,,直到队列不满才会进行插入操作。
当队列为空的时候,从队列里取出元素,此时也会阻塞。。一直阻塞到队列不为空的时候才完成取元素操作。
阻塞队列可以帮我们完成“生产者消费者模型”
生产消费者模型:规模稍微大一点的程序,势必会用到生产者消费者模型~~
(包饺子模型)一个人擀饺子皮(生产者),多个人包饺子(消费者)。
生产者将饺子皮放到一个地方,消费者去那个地方取饺子皮。
阻塞队列就是这样的一个地方。
使用阻塞队列,能够很好地协调生产者和消费者之间的工作节奏。
阻塞队列
这种阻塞队列在服务器开发中特别有用~
同一个服务器,同一时刻可能收到很多的请求,服务器的处理能力是有限的,如果同一时刻服务器收到的请求过多,可能就会导致服务器宕机。
所以,就可以使用生产者消费者模型来进行“削峰”操作,削弱请求峰值对服务器的冲击力。从而避免上述情况的发生。
将超出负载的多余的请求加入阻塞队列中, 等待服务器腾出资源时在逐次加入服务器中,此时的服务器,也可以理解成cpu,每次只放行一小部分的线程进入cup,类似于打疫苗排队的过程。
Java标准库中,已经提供了现成的阻塞队列blockingQueue,在java.util.concurrent包中:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* @Name: ThreadDemo4
* @Description: 阻塞队列
* @Author: panlai
* @Date: 2021/8/10 11:45
*/
public class ThreadDemo4 {
public static void main(String[] args) throws InterruptedException {
// BlockingQueue本身是一个接口,不能直接实例化,就类似map
BlockingQueue<String