簡體   English   中英

同步庫/第三方類?

[英]Synchronizing on library/third-party classes?

在Java中,通常認為在未編寫的類類型的對象上顯式同步是安全的嗎? 我問這個是因為看起來如果該對象在內部嘗試自身同步,則可能在另一個線程嘗試使用該對象的非同步方法(內部獲取對象的監視器)和明確獲取的線程之間存在意外的死鎖鎖定對象。 我從來沒有聽過或讀過任何說這是個壞主意的事情,雖然它似乎可能是。

Java允許你這樣做,但不要。 您應該非常努力地將鎖定封裝在類中,或者在盡可能小的單元內。

鎖定您不擁有並完全理解的對象可能會導致死鎖和其他混亂。

看看這個問題並考慮它如何適用於鎖定第三方對象。

此外,強制引用JCiP - Read Java Concurrency in Practice,以便對如何構建並發程序進行全面,可讀和高質量的討論。

我認為這個問題的答案歸結為信任。 您是否相信班級作家以這樣的方式編寫他們的對象,以至於您提到的問題不會發生? 如果是的話,那就去吧。 如果不是,那么您已經給出了可能導致問題的時間示例。

如果“看起來這可能是一個壞主意”,它可能是。 線程是變化無常的,除非你能證明它是正確的,否則它很可能不是(除非完全是偶然的)。

如果是我,我會保守,而不是同步我沒有完全控制的對象,所以我可以確定它是正確的,沒有猜測。

暫無
暫無

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

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