有一點(diǎn)必須注重的就是多線程程序所帶來的數(shù)據(jù)完整性問題。對(duì)于我們常使用的從數(shù)據(jù)庫讀取數(shù)據(jù)到對(duì)象中->修改對(duì)象屬性->更新到數(shù)據(jù)庫這個(gè)流程,非常輕易出現(xiàn)數(shù)據(jù)完整性破壞問題。比如一個(gè)進(jìn)程中甲對(duì)象讀取數(shù)據(jù)后,另一個(gè)進(jìn)程中乙對(duì)象又修改了同一數(shù)據(jù),這時(shí)甲對(duì)象再次更新數(shù)據(jù)庫會(huì)帶來污寫。解決的辦法是對(duì)象增加一個(gè)方法給數(shù)據(jù)庫的這條記錄加鎖。例如Account.getByAccountId函數(shù)改為Account.getByAccountIdForUpdate,這個(gè)函數(shù)中相應(yīng)的sql語句(Oracle數(shù)據(jù)庫)改為"select AccountId,name from account where accountId=? for update",這樣數(shù)據(jù)取出后就自動(dòng)加鎖,這個(gè)鎖將會(huì)在事務(wù)提交或回滾時(shí)釋放。for update在SQLServer相應(yīng)的語法為holdlock。