Czym jest statyczna synchronizacja w Java?

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

  1. Klasa SharedResource: zawiera statyczną zmienną accessCount, która jest współdzielona przez wszystkie instancje. Statyczna metoda incrementAccess() jest synchronizowana, co oznacza, że w danym momencie tylko jeden wątek może wykonywać tę metodę.
  2. Klasa ResourceUser: rozszerza Thread i w swojej metodzie run() wywołuje incrementAccess(), symulując użycie zasobu przez różne wątki.
  3. 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.

Scroll to Top