Java 中應該避免使用 Synchronized(this) 嗎?
有些開發人員主張反對使用 Synchronized(this),聲稱對私人參考是更好的選擇。引用的原因包括潛在的鎖被盜、吞吐量降低和過多的資訊暴露。
鎖被盜
雖然鎖被盜是一個潛在的問題,但更有可能是無意中發生的,因為以免意外打開鎖。當使用synchronized(this)時,鎖成為類別公開介面的一部分,並且應該相應地記錄下來。在某些情況下,其他程式碼可能會故意存取鎖定,例如使用 Collections.synchronizedMap 時。
降低吞吐量
synchronized(this) 降低吞吐量的說法是過於簡單化。單獨消除synchronized(this)並不會提高效能。正確的同步需要仔細設計以優化吞吐量。
過多的資訊暴露
Synchronized(this) 在類別中的所有同步方法之間共用鎖定。如果需要細粒度鎖定,則synchronized(this)不適用,應替換為私有鎖。
何時使用Synchronized(this)
儘管存在一些擔憂,synchronized(this) 仍然是一個有效的同步習慣用法,具有以下幾個優點:
結論
synchronized(this)之間的選擇私有鎖取決於應用程式的特定要求。雖然不應完全避免同步(this),但開發人員應仔細考慮其含義,並在必要時使用私有鎖,例如當粒度或資訊隱藏是優先考慮時。
以上是你應該避免在 Java 中使用「synchronized(this)」嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!