老板让我做一个缓存机制,我选择了Java自带的BlockingQueue

博客介绍了在数据插入数据库压力大时,可使用缓冲池缓冲数据,如redis的list数组、Mq消息队列和阻塞队列。详细讲解了阻塞队列BlockingQueue的概念、方法,并说明了在实际项目中的使用方式,指出其能自动处理线程阻塞和唤醒,降低程序复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多接口在插入数据的时候直接插入到数据库,有时候数据一多,会给我们数据库带来很大的压力,这个时候我们就需要用一个类似缓冲池给数据做一个缓冲,实现的方法有很多种。

比如:redis的list数组,Mq等中间件的消息队列,
还有我们今天要讲的BlockingQueue阻塞队列

什么是BlockingQueue?

阻塞队列首先是一个队列,当队列是空的时候,从队列获取元素的操作将会被阻塞,当队列是满的时候,从队列插入元素的操作将会被阻塞。

他有哪些方法?

在这里插入图片描述
这里面的意思就是插入方法一共有个,其中如果队列满了之后用add方法继续插入就会抛出异常。

这里就不具体详解每个方法吗,如果这篇文章点赞多的话,我会考虑出一期方法详解

我们怎么在实际的项目过程中去使用他?

首先我们在接口插入的时候去存到BlockingQueue中去:
在这里插入图片描述
之后我们再创建一个异步线程去消费他,我们在启动的时候就初始化一个线程去消费:
在这里插入图片描述
这里我需要有一个config类去把ExecutorService注入到bean里面去,因为ExecutorService是一个接口:
在这里插入图片描述
最后我们在消费线程里面去消费就行啦:
在这里插入图片描述
总结:

  1. 在多线程领域,所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒。

  2. 使用BlockingQueue好处是我们不需要关心什么时候去阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQue都给你一手包办了。

  3. 在Concurrent包发布以前,在多线程环境下,我们每个程序员都要去控制这些细节,尤其还要兼顾效率与线程安全,这会给我们的程序带来不小的复杂度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掉头发的王富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值