java同步,實現(xiàn)insert的唯一性
業(yè)務(wù)流程:查詢表中是否有某條記錄,如果沒有就insert,如果存在就update.
問題1:在執(zhí)行insert的過程中,因為有多個對象對一個表進(jìn)行select操作,對象A先執(zhí)行select操作,查詢表中沒有該條數(shù)據(jù),再去執(zhí)行insert。但是對象B在對象A還沒有執(zhí)行完insert操作的過程中,就去執(zhí)行select操作,也發(fā)現(xiàn)沒有該條數(shù)據(jù),執(zhí)行insert操作。最后結(jié)果可想而知,插入了多條id相同,其他字段不同的數(shù)據(jù)。
解決:使用同步(synchronized)。
synchronized的參數(shù):class。我將(dao層接口名.class)作為參數(shù)————(說實話我這里也沒太搞明白 ,接口為啥能.class希望大佬能解答我的問題)。
這樣一來每個對象只能等待上個對象處理完insert等一系列操作,才會解鎖并交給下個對象去執(zhí)行。保證了insert的唯一性。

小拓展:
1.synchronized也可以作為修飾符放在方法,對象上,如果它作用的對象是非靜態(tài)的,則它取得的鎖是對象;如果synchronized作用的對象是一個靜態(tài)方法或一個類,則它取得的鎖是對類,該類所有的對象同一把鎖。
2、每個對象只有一個鎖(lock)與之相關(guān)聯(lián),誰拿到這個鎖誰就可以運行它所控制的那段代碼
3、實現(xiàn)同步是要很大的系統(tǒng)開銷作為代價的,甚至可能造成死鎖,所以盡量避免無謂的同步控制
這里只提供一個例子,詳細(xì)的使用方法還請自尋
參考:http://www.rzrgm.cn/weibanggang/p/9470718.html
浙公網(wǎng)安備 33010602011771號