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: rozszerzaThreadi 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.

