私はいつも次のシナリオで混乱しています
MyClass のオブジェクトは 1 つだけで、T1、T2 の 2 つのスレッドがあります。ここで、1 つのスレッド T2 が MyClass オブジェクト ロックのみを持つ同期メソッド m1() を使用できるようになり、他のスレッド T2 が m1() にアクセスしようとするとブロックされるとします。
現在の私の認識では、T2 が静的共有フィールドにアクセスして静的同期メソッド m2() にアクセスしようとすると、現在のオブジェクト ロックが T1 にあり、m2() を実行できず、Myclass の 2 つのオブジェクトがあった場合にブロックされます。その後、T2 スレッドは m1() にアクセスできます。私は正しいですか、それとも間違っていますか?
class MyClass
{
public static int i = 5;
public synchronized void m1()
{
System.out.println(i); //uses static field i of MyClass
//T1 is executing this method
}
public static synchronized void m3()
{
//T2 will be able to call this method on same object lock while it is using
//static field i???
System.out.println(i);//uses static field i of MyClass
}
}
これは非常に紛らわしいです助けてください。前もって感謝します。