Ich ging durch multi-Threading Konzepte.Unterschied zwischen synchronisiert (foo.class) vs synchronisiert (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
}
}
}
Ich werde entweder testMethod1 oder testMethod2 in meinem Code verwenden.
Wie Sie sehen, ich bin mit synchronized
auf dem Foo.class in testMethod1()
, und SomeClass.class in testMethod2()
.
Wenn jemand Methode ich verwende es gibt dasselbe Ergebnis in mehreren Thread-Zugriff. Ich möchte den Unterschied zwischen den Verwendungen wissen, wenn ich die gleiche Klasse für den synchronisierten Block und eine andere Klasse für den synchronisierten Block verwenden muss.
Oder gibt es einen Unterschied zwischen den beiden oben genannten Methoden?
Es gibt keinen Unterschied zwischen ihnen. –
Ja, es gibt einen Unterschied. Sie synchronisieren nicht auf demselben Objekt, so dass sie sich nicht gegenseitig ausschließen, was bedeutet, dass ein Thread Code innerhalb von 'synchronized (foo.class)' Block ausführen kann, während ein anderer Thread Code innerhalb der 'synchronized (SomeClass.class)' Klasse ausführen kann , **gleichzeitig**. – Andreas
Meine Ergebnisse. AnyClass.class oder AnyClass.getClass() gibt ein Klassenobjekt zurück, das eindeutig/singleTon ist. Daher wird synchronisiert (AnyClass.class) eine Sperre für diesen Verweis haben, daher kann nur ein Thread auf diesen Block zugreifen. Auch können wir private statische finale verwenden Objekt lock = new Object(); um eine Sperre zu machen. So können wir AnyClass.class im synchronisierten Block verwenden. –