は、我々はこのようのsyncronizationを使用します。いつかのsyncronizationいつものように
Class A{
public void method1{
syncronized(this){
}
}
public void method2{
syncronized(this){
}
}
}
、私はこのようなコードを見つけました:クラスCの場合と同様に
Class B{
public void method3{
syncronized(B.class){ //class level lock but lock itself
}
}
}
Class C{
public void method4{
syncronized(B.class){/class level lock but lock other class
}
}
}
を示し、それがBを使用しますクラスをモニタとして使用できます。クラスCインスタンスC1とスレッドt3アクセスクラスBインスタンスB1の2つのスレッドt1とt2がアクセスしていると仮定すると、t1がC1にアクセスするときにインスタンスB1またはクラスBに影響はありますか? はBクラスの "this"のようなB.classの役割ですか?
私はそれがコピー/ペーストプログラミングのアーティファクトだと思います。クラスCはおそらくクラスBをコピーし、名前を変更し、B固有のものを削除することによって作成されました。 – sisyphus
@sisyphusいいえ、それは正しいコードです。問題を議論する例として。 – lawrence
最初のコードに示すように、通常は同期を使用しません。メソッドを 'synchronized'にするのではなく、' this'を手動で同期させるのは間違いです。一方、第2の例は悪く、エラーを起こしやすいプログラミングである。 – Kayaman