Jaka jest różnica między metodami yield() i join() w Javie?

W programowaniu wielowątkowym w Javie, odpowiednie zarządzanie wątkami jest kluczowe do efektywnego wykorzystania zasobów systemowych. Dwie fundamentalne metody, które pomagają w zarządzaniu wykonaniem wątków to yield() i join(). Każda z nich pełni specyficzną rolę w cyklu życia wątku, i zrozumienie ich różnic jest niezbędne dla każdego programisty Java.

Przykład użycia yield() i join()

Poniżej znajdziesz przykład kodu w Javie, który ilustruje różnice w działaniu metod yield() i join(). Kod został sformatowany tak, aby nie przekraczał 60 znaków na linię, z komentarzami po polsku wyjaśniającymi działanie poszczególnych fragmentów.

public class ThreadExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 5; i++) {
                    System.out.println("Wątek 1: " + i);
                    // Wątek "oddaje" procesor, by inny mógł działać
                    Thread.yield();
                }
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 5; i++) {
                    System.out.println("Wątek 2: " + i);
                    if (i == 2) {
                        try {
                            // Wątek 1 musi zakończyć przed wątkiem 2
                            thread1.join();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });

        thread1.start();
        thread2.start();
    }
}

Opis działania

  • Metoda yield(): Ta metoda jest wywoływana przez wątek, aby “oddac” swoją obecną porcję czasu procesora, co pozwala innym wątkom o takim samym lub wyższym priorytecie przejąć wykonanie. Jest to sposób na informowanie planisty wątków (thread scheduler), że bieżący wątek nie ma nic przeciwko temu, aby inne wątki wykonywały się teraz.
  • Metoda join(): Ta metoda jest używana, gdy chcemy zaczekać na zakończenie wykonania innego wątku. W przykładzie wątek 2 wstrzymuje swoje działanie (na punkcie, gdzie i == 2), dopóki wątek 1 całkowicie się nie zakończy.

Podsumowanie

Metody yield() i join() są użyteczne narzędzia w zarządzaniu wielowątkowością w Javie, każda z nich służy innemu celowi: yield() pozwala innym wątkom korzystać z CPU, podczas gdy join() zatrzymuje wykonanie bieżącego wątku, aż inny określony wątek zakończy swoje zadania. Rozumienie ich różnic i zastosowań jest istotne dla tworzenia efektywnego i stabilnego oprogramowania wielowątkowego.

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