Java线程,消费的速度跟不上生产的速度

纯洁的大白 2019-08-15 11:08:38
接收数据添加到BlockingQueue queue里很快,保存数据进数据库速度速度一般,造成queue积累数据越来越多,导致接收到时间与保存插入的时间相差越来越大,我启了5个保存数据的线程也跟不上,有没有更好的方法。
new Thread(new Runnable() {
@Override
public void run() {
while (run) {
try {
GpsData data = Server.take();
GroupGps gps = (GroupGps) data;
boolean save = preSave(gps);
if(save) {
gps.setId(UUID.randomUUID().toString());
gps.setInserttime(new Date());
gpsRepository.save(gps);
logger.info("----线程1在保存数据-----");
}

} catch (Exception e) {
e.printStackTrace();
}
}

}
}).start();
...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
戎码一生灬 2019-08-16
  • 打赏
  • 举报
回复
单个保存肯定慢啊,改为批量即可
baichangda234 2019-08-16
  • 打赏
  • 举报
回复
我觉得你应该做的是 优化保存速度,例如开启批量保存
datafansbj 2019-08-15
  • 打赏
  • 举报
回复
这种问题只能开中间缓冲层来处理,将拥塞的数据先存到磁盘上,否则 queue 迟早会耗尽内存。即使存到磁盘上,理论上也有耗尽磁盘空间的可能。成熟的商业项目有中间件来解决这个问题,如 MQ。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧