带持久化缓冲的ThreadPoolExecutor

介绍一种基于ArrayBlockingQueue优化ThreadPoolExecutor的方法,通过在超过阀值后将请求进行持久化,确保系统在高并发压力下仍保持稳定性和性能平衡。支持多种持久化方式,如基于文件、数据库或Redis,并默认实现基于文件的缓冲持久化。

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

由于项目中需要使用ArrayBlockingQueue方式的ThreadPoolExecutor,设置的有界队列上限为1000,由于java默认在线程数超过maximumPoolSize时会抛弃超过上限的请求,所以在某些压力较大情况下会出现丢弃较多请求的情况。所以如果能先把超过上限的请求序列化到某种存储介质上,然后按照先进先出一批批的提供给后面的工作线程,做一个类似“阀门”装置,那就比较好了。
目前这个组件已经开发完毕,目前开源地址是https://github.com/netcomm/sponge,它的基本介绍如下:

#使用方式跟普通的ThreadPoolExecutor没有任何差别,开发人员没有任何感觉。

#正常情况下请求都走内存,只有在超过阀值后,请求才会进行持久化,一旦持久化的请求都被消费后,重新进入内存模式。这极大的保证了性能和缓冲的平衡。

#在突发极大并发请求下,保证系统的稳定性为第一目标。

#能自动缓冲超过某个阀值的任务请求。

#缓冲持久化的方式灵活,可根据使用场景进行选择,如基于文件(系统吞吐量巨大)、数据库(系统吞吐量大)、redis(系统吞吐量巨大)、…。

#任务的请求处理顺序默认先进先出模式。

#实现原理简单,代码量少。

#默认实现基于文件的缓冲持久化模式。

#关键参数可调整。
功能虽小,但用途还是比较广的,理论上任何使用ThreadPoolExecutor的地方,都可以用它来替代。欢迎大家在实际项目中使用,有任何问题都请联系我或提交到github上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值