Java の Synchronized(this) は避けるべきですか?
一部の開発者は、同期された (this) の使用に反対し、プライベート参照が望ましいです。理由としては、ロックの盗難の可能性、スループットの低下、過剰な情報漏洩などが挙げられます。
ロックの盗難
ロックの盗難は潜在的な懸念事項ではありますが、意図せずに発生する可能性がより高くなります。誤ってロックにアクセスしてしまう可能性があります。 synchronized(this) が使用される場合、ロックはクラスの公開インターフェースの一部となるため、それに応じて文書化する必要があります。 Collections.synchronizedMap を使用する場合など、特定のシナリオでは、他のコードが意図的にロックにアクセスする可能性があります。
スループットの低下
synchronized(this) によってスループットが低下するという主張は、次のとおりです。あまりにも単純すぎる。 synchronized(this) を削除するだけではパフォーマンスは向上しません。適切な同期には、スループットを最適化するための慎重な設計が必要です。
過剰な情報漏洩
Synchronized(this) は、クラス内のすべての同期メソッド間でロックを共有します。詳細なロックが必要な場合、synchronized(this) は適用できないため、プライベート ロックに置き換える必要があります。
Synchronized(this) を使用する場合
提起された懸念にもかかわらず、synchronized(this) は依然として有効な同期イディオムであり、いくつかの利点:
結論
synchronized(this) とプライベート ロックのどちらを選択するかは、アプリケーションの特定の要件によって異なります。 synchronized(this) を完全に回避すべきではありませんが、開発者はその影響を慎重に検討し、粒度や情報の隠蔽が優先される場合など、必要に応じてプライベート ロックを使用する必要があります。
以上がJava では `synchronized(this)` を避けるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。