web-dev-qa-db-ja.com

同期を非推奨にし、待機して通知するときですか?

synchronizedを使用するよりもLockを使用する方が好ましい単一のシナリオ(古代のJVMとの互換性以外)はありますか?新しいシステムでwaitまたはnotifyを使用する正当な理由はありますか?

mustを実装するアルゴリズムはありますか?

この問題に関連する 前の 質問が表示されますが、これについてもう少し詳しく、実際にdeprecate質問したいと思います。新しい設備で解決されたトラップと落とし穴と警告が多すぎます。もうすぐそれらを時代遅れとマークする時期かもしれないと感じています。

13
OldCurmudgeon

その実装でそれらの1つを使用する必要があるアルゴリズムはありますか?

ほとんど間違いなくそうではありません。 (実際、理論的な観点から、他のJava.util.concurrent。クラスを使用して待機/通知をシミュレートできるはずです。明示的なLock操作に置き換えられました... finally句でロックを解除するように注意する必要があります。)

ただし、=Javaでの最高のパフォーマンスの実装には、待機の有無にかかわらず同期の直接使用が含まれます)おそらくアルゴリズムがあります通知します。


同期を非推奨にし、待機して通知するときですか?

前の質問の答えに関係なく、答えは間違いなくノーです。

待機/通知は正しく使用できます(多くの場合、正しく使用されます)。 Javaでは、非推奨は、壊れたクラスとメソッドのために予約されています。つまり、緊急の問題として継続使用を修正する必要がある場合。 Sun(および現在のOracle)が何かを根本的なものとして非推奨にし、待機/通知と同じくらい広く使用した場合、それらは大量のレガシーコードに対して深刻な互換性の問題を引き起こします。それは誰の利益にもなりません。

コードで同期/待機/通知を取り除きたい場合は、それで問題ありません。しかし、廃止により、大量の本質的に正しいマルチスレッドコードの書き換えが必要になり、それは悪い考えです。企業のITマネージャーとソフトウェア製品マネージャーは、あなたにそれを提案して嫌いです...


Javaドキュメント: http://によると、「非推奨」の意味)を読む価値があります。 docs.Oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html

また、Java言語のコアである非推奨のものについて話していることにも注意してください。synchronizedの非推奨には大きな影響があります。

12
Stephen C