可能性の重複:私は同期のarticleて読んでいた
Java Synchronized Block for .class同期(本)
。私は以下の点を混乱し、より明確にする必要があります。
1)同期ブロックの場合。
synchronize(this){
// code
}
が同期)
synchronize(MyClass.class){
//code
}
2とどのように異なるかインスタンスメソッドは、静的メソッドを同期化するスレッドが、クラス全体のロックを取得しなければならないことを意味している間のスレッドは、インスタンス上の排他ロックを取得する必要があります意味します(私が間違っていれば私を修正してください)。したがって、クラスに3つのメソッドがあり、そのうちの1つが静的に同期化されている場合、スレッドがそのメソッドのロックを取得すると、クラス全体でロックを取得することになります。つまり、他の2つもロックされ、クラス全体がロックしているので、これら2つのメソッドにアクセスしますか?
static class varsのみがsynchronized(MyClass.class)でロックされますか? – tgkprog
@tgkprog変数自体を同期させないで、メソッドへのアクセスを同期させます。 'MyClass.class'は単なるオブジェクトであり、インスタンスメソッドを同期させることも可能です(実際には必要なときは想像できませんが)が、一般的にこのパラダイムは静的メソッドで使用されます。 –
hmm私は同期(MyClass.class)は、クラスで宣言された静的変数のみをロックすると考えました。それを見る必要があります。だから、もしあなたが私のクラスのインスタンスを1,000個持っていたら、それぞれが100個の変数を持っていれば、それらはすべてロックされますか? – tgkprog