Ich weiß, dass die Verwendung des synchronize
Schlüsselworts vor einer Methode die Synchronisation für dieses Objekt bewirkt. Das heißt, 2 Threads, auf denen dieselbe Instanz des Objekts ausgeführt wird, werden synchronisiert.
Da sich die Synchronisation jedoch auf Objektebene befindet, werden 2 Threads, auf denen verschiedene Instanzen des Objekts ausgeführt werden, nicht synchronisiert. Wenn wir eine statische Variable in einer Java-Klasse haben, die von der Methode aufgerufen wird, möchten wir, dass sie über Instanzen der Klasse hinweg synchronisiert wird. Die beiden Instanzen werden in zwei verschiedenen Threads ausgeführt.
Können wir die Synchronisation auf folgende Weise erreichen?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Stimmt es, dass die statische Variable jetzt über Klasseninstanzen hinweg synchronisiert ist, da wir ein lock
statisches Objekt definiert haben und das Schlüsselwort synchronized
für diese Sperre verwenden ?count
Test