Wiem, że użycie synchronize
słowa kluczowego przed metodą powoduje synchronizację z tym obiektem. Oznacza to, że zostaną zsynchronizowane 2 wątki z tym samym wystąpieniem obiektu.
Ponieważ jednak synchronizacja jest na poziomie obiektu, 2 wątki z różnymi instancjami obiektu nie zostaną zsynchronizowane. Jeśli w klasie Java mamy zmienną statyczną, która jest wywoływana przez metodę, chcielibyśmy, aby była zsynchronizowana między instancjami tej klasy. Te dwie instancje działają w 2 różnych wątkach.
Czy możemy osiągnąć synchronizację w następujący sposób?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Czy to prawda, że skoro zdefiniowaliśmy obiekt, lock
który jest statyczny i używamy słowa kluczowego synchronized
dla tej blokady, zmienna statyczna count
jest teraz zsynchronizowana między instancjami klasy Test
?