私はマルチを経由していましたスレッディングの概念。synchronized(foo.class)とsynchronized(SomeClass.class)の違い
public class Foo{
public void testMethod1(){
synchronized(foo.class){
// only one thread can access this block at a time
}
}
// or i can use the below method
public void testMethod2(){
synchronized(SomeClass.class){
// only one thread can access this block at a time
}
}
}
私は自分のコードでtestMethod1またはtestMethod2のいずれかを使用します。
あなたは私がtestMethod2()
にtestMethod1()
、 とSomeClass.classにFOO.CLASSにを使用しています見ることができるように。
私が使用しているメソッドが複数のスレッドアクセスで同じ結果を与えている場合。 同期ブロックと同期ブロックのために同じクラスを使用する必要がある場合の使用法の違いを知りたいと思います。
上記の2つの方法に違いはありますか?
これらの間に違いはありません。 –
はい、違いがあります。他のスレッドが 'synchronized(SomeClass.class)'クラス内でコードを実行できる間に、同じオブジェクト上で同期していないので、相互排他的ではありません。つまり、あるスレッドがsynchronized(foo.class) 、 **同時に**。 – Andreas
私の所見。 AnyClass.classまたはAnyClass.getClass()は、一意の/ singleTonのクラスオブジェクトを返します。したがって、synchronized(AnyClass.class)はその参照へのロックを持ち、したがってそのスレッドにアクセスできるスレッドは1つだけです。また、私たちはプライベート静的な最終的なオブジェクトのロックを使用することができます=新しいObject();ロックを作る。したがって、AnyClass.classはsynchronizedブロックで使用できます。 –