簡體   English   中英

在局部變量上同步,比同步方法更好?

[英]synchronized on local variable, better than synchronized methods?

我圍繞數據庫查詢編寫了一個包裝器,需要從不同的線程訪問它。 因此,我的應用程序恰好創建了該幫助程序類的一個實例,並通過getter返回它。

DbConnection dbc = app.getDatabaseConnection();
synchronized (dbc) {
  dbc.doSomething();
}

此代碼安全嗎? 如前所述這里它應該工作,雖然在一個局部變量的同步。 只要保證對象實例相同,這是正確的嗎?

使所有受影響的DbConnection實例方法同步的更好方法嗎?

那不是一個好的設計。

不必通過在必要時使它的方法/塊同步來使DBConnection類具有固有的線程安全性,而是強制此類的所有客戶端在每次需要時顯式同步。 因此,您無需將此線程安全性封裝在一個單獨的,明確確定的類中,而是將這種責任分配給該類的所有客戶端,從而使整個過程變得非常脆弱,並且非常難以發現潛在的錯誤。

也就是說,使用來自多個線程的單個數據庫連接本身不是一個好主意。

如果您的DbConnection的所有實例方法都需要同步,則使所有方法都同步。 不要看寫的代碼量,而只看正確性。 如果同步每個方法,那么您將沒有機會追溯到現在,而是調用getDatabaseConnection卻忘記了同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM