如今框架橫行,Spring 已經(jīng)是非常成熟的容器體系,我們?cè)谌粘i_發(fā) JavaWeb 的工作中,大多已經(jīng)不需要考慮多線程的問題,這些問題都已經(jīng)在Spring容器中實(shí)現(xiàn),框架的意義就是讓程序員們可以專注于邏輯的實(shí)現(xiàn)。然而這種編程工作是非常無趣無味的,如果長(zhǎng)期從事這個(gè)工作,技術(shù)不一定見長(zhǎng),業(yè)務(wù)知識(shí)一定很熟悉!= =但說實(shí)在的,我并不喜歡這類工作,因?yàn)檫@種工作大多情況下知識(shí)對(duì)代碼的簡(jiǎn)單復(fù)制,或是簡(jiǎn)單的一些編寫,并沒有什么真正的創(chuàng)造性,不會(huì)給人成就感。
需求背景
我們的項(xiàng)目,是 Mysql+ElasticSearch 做的一個(gè)數(shù)據(jù)庫和搜索引擎,項(xiàng)目經(jīng)理提出需要做一個(gè)用于重建 ES 搜索數(shù)據(jù)的接口,這個(gè)任務(wù)很光榮的交給了我。
在功能的編寫過程當(dāng)中,我突然思考這樣一個(gè)問題,因?yàn)槲覀?Web 項(xiàng)目本身是多線程的,那如果在同一時(shí)間段,有多個(gè)請(qǐng)求同時(shí)發(fā)起,那同時(shí)發(fā)起 ES 的重建,對(duì)于 ES 來說,可能會(huì)產(chǎn)生一些莫名其妙的問題。
所以我感到非常高興,因?yàn)檫@個(gè)問題,似乎不是聽起來的那么簡(jiǎn)單。于是乎我想到了,要加入同步鎖了。
最開始的思考:
最開始我只是很簡(jiǎn)單的想,直接在對(duì)應(yīng)的 Service 層寫一個(gè)方法,然后直接加一個(gè)
synchronized(this)
在整個(gè)方法體上?! ?/p>
1 @Override2 public synchronized int rebuiltBountyData() throws Exception {3 ...4 }
網(wǎng)友評(píng)論