本文介紹了多線程正確性-同步不一致的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
這有什么問題…?
public final void setListValid(final List<ValidRes> listValidRes) {
this.listValidRes = listValidRes;
}
聲納對我大喊大叫:
Inconsistent synchronization of xxx.listValidRes; locked 50% of time
有人知道我需要做什么嗎?
推薦答案
問題中給出的代碼沒有同步。我假設您在代碼中的其他位置同步了this.listValidRes
。而這正是Sonar告訴您的:如果您對某個資源進行同步,請對所有使用進行同步,或者根本不進行同步并讓其他人處理它。
基本上這是一個設計決定:
您可以選擇不同步并讓客戶端處理它。這樣做的好處是,如果沒有同步,它的速度會快得多。因此,如果您的類是在單線程設置中使用的,那么最好放棄同步。但將其清楚地記錄為而不是線程安全或客戶端將以多線程方式使用它并抱怨奇怪的錯誤…
如果選擇(或必須)同步,則對關鍵資源的每次使用執行同步。有不同的方法可以實現這一點。也許您想要顯示您實際上已同步的資源的使用情況。也許我或其他人可以在這方面給你一些好的建議。
這篇關于多線程正確性-同步不一致的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,