リンク リスト N0 、 N1 、 N2 に 3 つのノードしかなく、次の同期ステートメントを使用して N2 のロックを取得したいとします。
synchronized(N1.next)
上記のステートメントは何をしますか? 最初に N1 をロックしてから N1.next をロックしますか、それとも N1.next を直接ロックしますか?
リンク リスト N0 、 N1 、 N2 に 3 つのノードしかなく、次の同期ステートメントを使用して N2 のロックを取得したいとします。
synchronized(N1.next)
上記のステートメントは何をしますか? 最初に N1 をロックしてから N1.next をロックしますか、それとも N1.next を直接ロックしますか?
ミューテックスがどのように機能するかについて、奇妙な考えをお持ちのようです。たとえば、以前の質問も同様です。
synchronized
メソッドまたはブロックを実行するとsynchronized
、1 つのミューテックスのみが取得されます。つまり、1 つの「もの」だけがロックされます。また、そのミューテックスを取得すると、他のスレッドが同じミューテックスを取得しようとした場合にのみ、他のスレッドに影響します。
「これをロックすると、それもロックされますか」ということはありません。これは、アプリケーションが一貫して特定のミューテックス/ロックを使用してそれを意味する場合にのみ発生します。
指定されたオブジェクトであるため、N1.next は自然にロックされます。