Jakie są różnice między procesem a wątkiem w Javie?

W programowaniu wielowątkowym i współbieżnym, zrozumienie różnicy między procesem a wątkiem jest kluczowe do efektywnego zarządzania zasobami i wykonaniem kodu. Java jako język zapewnia obszerną obsługę zarówno procesów, jak i wątków, co umożliwia tworzenie zaawansowanych aplikacji wielozadaniowych. W tym artykule przyjrzymy się bliżej, czym różnią się te dwa pojęcia oraz zaprezentujemy praktyczny przykład użycia wątków w Javie.

Proces vs. Wątek

Proces to niezależny blok wykonawczy zawierający swój własny zestaw zasobów przydzielonych przez system operacyjny, w tym pamięć, identyfikatory procesów, a także własne zmienne środowiskowe i ustawienia konfiguracyjne. Każdy proces jest wykonany w oddzielnej przestrzeni adresowej, a komunikacja między procesami wymaga specjalnych mechanizmów IPC (Inter-Process Communication).

Wątek to lżejsza i bardziej oszczędna forma wykonania kodu. Wątki działają w obrębie tego samego procesu, dzieląc jego zasoby, takie jak pamięć i pliki. To pozwala na łatwiejszą i szybszą komunikację między wątkami. W Javie wątki mogą być tworzone przez implementację interfejsu Runnable lub poprzez rozszerzenie klasy Thread.

Przykład kodu

Poniżej znajduje się przykład kodu, który ilustruje tworzenie i zarządzanie wątkami w Javie. Przykład przedstawia symulację dwóch zadań wykonywanych równolegle w ramach tego samego procesu.

// Klasa implementująca interfejs Runnable
class Task implements Runnable {
    private String taskName; // Nazwa zadania

    // Konstruktor klasy Task
    public Task(String name) {
        this.taskName = name; // Przypisanie nazwy zadania
    }

    // Metoda run zawierająca logikę zadania
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(taskName + " wykonuje operację " + i);
            try {
                // Usypianie wątku na 1000 ms
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(taskName + " został przerwany");
            }
        }
    }
}

// Główna klasa programu
public class ThreadExample {
    public static void main(String[] args) {
        // Tworzenie obiektów klasy Task
        Task task1 = new Task("Zadanie 1");
        Task task2 = new Task("Zadanie 2");

        // Tworzenie wątków na podstawie zadań
        Thread thread1 = new Thread(task1);
        Thread thread2 = new Thread(task2);

        // Uruchamianie wątków
        thread1.start();
        thread2.start();
    }
}

Każde zadanie w powyższym kodzie jest oddzielnym wątkiem, który wykonuje serię operacji w pętli. Thread.sleep(1000) powoduje, że wątek jest usypiany na 1000 milisekund, co symuluje cięższą operację.

Podsumowanie

Rozróżnienie procesu od wątku w Javie pozwala na lepsze zrozumienie i zarządzanie sposobem, w jaki aplikacje wykonują zadania równolegle. Procesy są bardziej izolowane, ale cięższe w zarządzaniu, natomiast wątki oferują lżejsze i szybsze podejście do współbieżności w obrębie tego samego procesu

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