如今框架横行,Spring 已经是非常成熟的容器体系,我们在日常开发 JavaWeb 的工作中,大多已经不需要考虑多线程的问题,这些问题都已经在Spring容器中实现,框架的意义就是让程序员们可以专注于逻辑的实现。然而这种编程工作是非常无趣无味的,如果长期从事这个工作,技术不一定见长,业务知识一定很熟悉!= =但说实在的,我并不喜欢这类工作,因为这种工作大多情况下知识对代码的简单复制,或是简单的一些编写,并没有什么真正的创造性,不会给人成就感。

  需求背景


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

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

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

最开始的思考:


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

synchronized(this)

在整个方法体上。    

1 @Override2     public synchronized int rebuiltBountyData() throws Exception {3         ...4     }

 

网友评论