Statyczna synchronizacja w Java to mechanizm, który pozwala na synchronizację bloków kodu lub metod na poziomie klasy, a nie obiektu. Jest to użyteczne, gdy chcemy mieć kontrolę nad dostępem do zasobów współdzielonych przez wszystkie instancje klasy, a nie tylko przez pojedynczy obiekt.
Przykład użycia statycznej synchronizacji
Zobaczmy przykład, który zilustruje, jak statyczna synchronizacja może być używana do zarządzania dostępem do wspólnego zasobu w środowisku wielowątkowym.
// Klasa z zasobem współdzielonym
class SharedResource {
// Zmienna do śledzenia liczby dostępów do zasobu
static int accessCount = 0;
// Statyczna metoda synchronizowana
public static synchronized void incrementAccess() {
// Inkrementacja licznika dostępów
accessCount++;
// Symulacja dłuższej operacji
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("Wątek został przerwany");
}
System.out.println("Liczba dostępów: " + accessCount);
}
}
// Klasa wątka używająca zasobu
class ResourceUser extends Thread {
public void run() {
// Wywołanie statycznej metody synchronizowanej
SharedResource.incrementAccess();
}
}
// Klasa główna do uruchomienia przykładu
public class StaticSynchronizationExample {
public static void main(String[] args) {
// Tworzenie wątków
Thread t1 = new ResourceUser();
Thread t2 = new ResourceUser();
Thread t3 = new ResourceUser();
// Start wątków
t1.start();
t2.start();
t3.start();
}
}
Analiza kodu
- Klasa
SharedResource
: zawiera statyczną zmiennąaccessCount
, która jest współdzielona przez wszystkie instancje. Statyczna metodaincrementAccess()
jest synchronizowana, co oznacza, że w danym momencie tylko jeden wątek może wykonywać tę metodę. - Klasa
ResourceUser
: rozszerzaThread
i w swojej metodzierun()
wywołujeincrementAccess()
, symulując użycie zasobu przez różne wątki. - Klasa
StaticSynchronizationExample
: uruchamia trzy wątki, które korzystają ze współdzielonego zasobu. Synchronizacja na poziomie metody zapewnia, że dostęp do zasobu jest bezpieczny i sekwencyjny, nawet w środowisku wielowątkowym.
Podsumowanie
Statyczna synchronizacja w Java umożliwia bezpieczne zarządzanie dostępem do wspólnych zasobów klasy w aplikacjach wielowątkowych. Dzięki statycznej synchronizacji, możemy zapobiegać problemom związanym z dostępem równoczesnym, takim jak naruszenie integralności danych. Jest to szczególnie ważne w aplikacjach, gdzie wiele wątków musi korzystać z tych samych zasobów klasy.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.