これら 2 つのキーワードの効果はまったく同じですか、それとも注意すべき点はありますか?
3 に答える
このサイトによると: http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_CSharp_lock_and_Java_synchronizedによると、C#lock
と Javaのsynchronized
コード ブロックは「意味的に同一」ですが、メソッドの場合、Java はsynchronized
C# が属性を使用している間に使用します[MethodImpl(MethodImplOptions.Synchronized)]
。
Keegによって投稿されたリンクでカバーされていない興味深い違いの 1 つ: 私の知る限り、 .NET のMonitor.EnterおよびMonitor.Exitに対する Javaの同等のメソッド呼び出しはありません。つまり、Monitor.TryEnterに相当するものも実行できません。もちろん、java.util.concurrent.locks パッケージ (1.5 以降) には、より多くの機能を利用できるさまざまなロックがあります。lock
I java を使用すると、所有しているパブリック タイプのロックについて心配する必要はありません。
.NET では、
更新: これは、所有しているタイプ用です。あなたが所有していない公開型をロックすることは、どの言語でも悪いことです:)