Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java Multithreading erklärt: Konzepte, Lebenszyklus und praktische Code-Beispiele

Java-Anwendungen müssen oft mehrere Aufgaben gleichzeitig ausführen. Dieses Tutorial führt Sie durch Single-Threaded- versus Multi-Threaded-Ausführung, den Lebenszyklus eines Threads, Synchronisationstechniken und praxisnahe Code-Beispiele, die jedes Konzept veranschaulichen.

Was ist ein Single Thread?

Ein Single Thread in Java ist die kleinste Ausführungseinheit. Die Java-Laufzeit erstellt einen User Thread beim Anwendungsstart, und Sie können zusätzliche User- oder Daemon Threads nach Bedarf hinzufügen. Daemon-Threads laufen im Hintergrund und verhindern nicht, dass die JVM beendet wird.

Beispiel für einen Single Thread:

package demotest;
public class GuruThread {
    public static void main(String[] args) {
        System.out.println("Single Thread");
    }
}

Vorteile der Single-Threaded-Ausführung:

Was ist Multithreading in Java?

Multithreading erlaubt zwei oder mehr Threads, parallel zu laufen und maximiert die CPU-Auslastung. Threads teilen sich denselben Speicherplatz, sodass Kontextwechsel schnell sind und der Speicherverbrauch niedrig bleibt.

Beispiel für die Erstellung zweier paralleler Threads:

package demotest;
public class GuruThread1 implements Runnable {
    public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
        // Thread-Logik hier
    }
}

Vorteile von Multithreading:

Thread-Lebenszyklus in Java

Der Thread-Lebenszyklus besteht aus fünf verschiedenen Zuständen:

  1. New – Thread ist instanziiert, aber nicht gestartet.
  2. Runnable – Thread wurde gestartet und ist bereit zur Ausführung.
  3. Running – Thread führt aktiv aus.
  4. Waiting – Thread ist suspendiert, bis ein bestimmtes Ereignis eintritt.
  5. Dead – Thread hat die Ausführung beendet.

Java Multithreading erklärt: Konzepte, Lebenszyklus und praktische Code-Beispiele
Thread-Lebenszyklus in Java

Wichtige Thread-Methoden

MethodeBeschreibung
start()Beginnt Thread-Ausführung; JVM ruft run() auf.
sleep(long milliseconds)Pausiert den aktuellen Thread für die angegebene Dauer.
getName()Gibt den Namen des Threads zurück.
setPriority(int newPriority)Justiert Thread-Priorität (1-10).
yield()Schlägt dem Scheduler vor, den aktuellen Thread zu pausieren.

Praktisches Thread-Beispiel

Nachfolgend ein prägnantes Beispiel, das Thread-Erstellung, Prioritätsanpassung und Sleep demonstriert.

package demotest;
public class ThreadExample1 implements Runnable {
    @Override
    public void run() {
        // Thread-Arbeit hier
    }
    public static void main(String[] args) {
        Thread guruThread1 = new Thread();
        guruThread1.start();
        try {
            Thread.sleep(1000); // 1 Sekunde pausieren
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        guruThread1.setPriority(1);
        System.out.println(guruThread1.getPriority());
        System.out.println("Thread Running");
    }
}

Ausgabe-Beispiel:

Java Multithreading erklärt: Konzepte, Lebenszyklus und praktische Code-Beispiele

Thread-Synchronisation

Wenn mehrere Threads auf gemeinsame Ressourcen zugreifen, stellt Synchronisation Datenkonsistenz sicher. In Java können Sie kritische Abschnitte mit dem synchronized-Schlüsselwort umschließen, was exklusiven Zugriff garantiert.

synchronized(object) {
    // synchronisierter Block
}

Fortgeschrittenes Multithreading-Beispiel

Nachfolgend ein ausführlicheres Beispiel, das zwei Threads erstellt, die jeweils ihren Namen und einen Zähler mit einer Sekunde Verzögerung ausgeben.

package demotest;
public class GuruThread2 {
    public static void main(String[] args) {
        GuruThread3 threadGuru1 = new GuruThread3("guru1");
        threadGuru1.start();
        GuruThread3 threadGuru2 = new GuruThread3("guru2");
        threadGuru2.start();
    }
}
class GuruThread3 implements Runnable {
    private Thread guruthread;
    private String guruname;
    GuruThread3(String name) {
        this.guruname = name;
    }
    @Override
    public void run() {
        System.out.println("Thread running " + guruname);
        for (int i = 0; i < 4; i++) {
            System.out.println(i);
            System.out.println(guruname);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println("Thread has been interrupted");
            }
        }
    }
    public void start() {
        System.out.println("Thread started");
        if (guruthread == null) {
            guruthread = new Thread(this, guruname);
            guruthread.start();
        }
    }
}

Typische Ausgabe (illustriert im begleitenden Bild):

Java Multithreading erklärt: Konzepte, Lebenszyklus und praktische Code-Beispiele

Zusammenfassung

Java

  1. Java Hello World: Ihr erstes Programm
  2. C++-Funktionen erklärt: Mit praktischen Code-Beispielen
  3. C# Collections meistern: Praktisches Tutorial mit Real-World-Beispielen
  4. Java String.indexOf() meistern: Substrings finden & praktische Beispiele
  5. Java String.charAt(): Syntax, Rückgabetyp, Exceptions und praktisches Beispiel
  6. Java String compareTo() meistern: Syntax, Anwendungsfälle und praktische Beispiele
  7. Konstruktor-Überladung in Java – Erklärt mit praktischen Code-Beispielen
  8. Java-Programm zur Prüfung, ob eine Zahl prim ist
  9. Insertion Sort Algorithmus in Java: Klares Beispiel & Schritt-für-Schritt-Anleitung
  10. Selection Sort in Java: Schritt-für-Schritt-Beispiel & Vollständiger Code