ElasticSearch多线程编程

本文探讨了在多线程环境中如何处理ElasticSearch数据重建的同步问题,以避免并发冲突。作者从最初的想法——使用`synchronized`关键字,到遇到的问题——线程等待而非拒绝执行,再到解决方案——引入模板模式和特定对象加锁,逐步展示了一个更优雅的处理方式。通过创建一个单独的对象来管理同步锁,并抽象出可复用的模板方法,提高了代码的可维护性和安全性。
摘要由CSDN通过智能技术生成

需求背景


  我们的项目,是 Mysql+ElasticSearch 做的一个数据库和搜索引擎,项目经理提出需要做一个用于重建 ES 搜索数据的接口,这个任务很光荣的交给了我。

  在功能的编写过程当中,我突然思考这样一个问题,因为我们 Web 项目本身是多线程的,那如果在同一时间段,有多个请求同时发起,那同时发起 ES 的重建,对于 ES 来说,可能会产生一些莫名其妙的问题。

  所以我感到非常高兴,因为这个问题,似乎不是听起来的那么简单。于是乎我想到了,要加入同步锁了。

最开始的思考:


  最开始我只是很简单的想,直接在对应的 Service 层写一个方法,然后直接加一个

synchronized(this)

在整个方法体上。   

 @Override
     public synchronized int rebuiltBountyData() throws Exception {
         ...
     }

可是问题来了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值