Do czego służy metoda yield() w klasie Thread w Java?

Metoda yield() w języku Java jest częścią klasy Thread i odgrywa kluczową rolę w zarządzaniu priorytetami wątków w aplikacji wielowątkowej. Umożliwia ona procesorowi przełączanie się między wątkami, które mają ten sam priorytet, co pozwala na bardziej sprawiedliwe i efektywne wykorzystanie zasobów CPU.

Przykład użycia metody yield()

W poniższym przykładzie zobaczymy, jak metoda yield() może być wykorzystana do symulacji scenariusza, gdzie dwa wątki mają równy priorytet, a metoda yield() jest używana, aby umożliwić innym wątkom o tej samej ważności procesorowej możliwość wykonania się.

class ThreadExample extends Thread {
    private String threadName;

    // Konstruktor do nadania nazwy wątkowi
    public ThreadExample(String name) {
        this.threadName = name;
    }

    // Metoda run, gdzie definiujemy działanie wątku
    public void run() {
        for (int i = 0; i < 5; i++) {
            // Wypisuje informacje o wątku i jego iteracji
            System.out.println(threadName + ": Iteracja " + i);
            // Wywołanie metody yield, by dać szansę innym wątkom
            Thread.yield();
        }
    }

    public static void main(String[] args) {
        // Tworzenie dwóch wątków
        ThreadExample thread1 = new ThreadExample("Wątek 1");
        ThreadExample thread2 = new ThreadExample("Wątek 2");
        
        // Uruchomienie wątków
        thread1.start();
        thread2.start();
    }
}

Wyjaśnienie kodu:

  1. Konstruktor (ThreadExample): Konstruktor przyjmuje nazwę wątku i przypisuje ją do zmiennej threadName.
  2. Metoda run(): Jest to główna metoda każdego wątku, która określa, co dany wątek ma robić. W naszym przypadku, wykonuje ona pętlę iterującą pięć razy, wypisując przy tym informacje o wątku i aktualnej iteracji.
  3. Thread.yield(): Wewnątrz pętli, metoda yield() jest wywoływana, co sugeruje planiście wątków, że obecny wątek chciałby oddać swoją kolej na procesorze innym wątkom o tej samej lub wyższej ważności.
  4. Metoda main(): W metodzie main() tworzymy i uruchamiamy dwa wątki, które działają równolegle.

Podsumowanie

Metoda yield() jest użyteczna, gdy chcemy zwiększyć responsywność i sprawiedliwość aplikacji wielowątkowych, umożliwiając bardziej równomierny podział czasu procesora między wątki o tych samych priorytetach. Użycie tej metody może przyczynić się do lepszego zarządzania zasobami systemowymi, szczególnie w środowiskach z dużą liczbą równoległych wątków.

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