Threads: Unterschied zwischen den Versionen
Aus FI-Wiki
Keine Bearbeitungszusammenfassung |
|||
| Zeile 1: | Zeile 1: | ||
Ein '''Thread''' ist ein leichtgewichtiger Ausführungsstrang innerhalb eines Programms. | Ein '''Thread''' ist ein leichtgewichtiger Ausführungsstrang innerhalb eines Programms. | ||
Mehrere Threads können gleichzeitig laufen und ermöglichen '''parallele''' oder '''nebenläufige''' Ausführung von Aufgaben. | Mehrere Threads können gleichzeitig laufen und ermöglichen '''parallele''' oder '''nebenläufige''' Ausführung von Aufgaben. | ||
Threads werden verwendet, um Programme schneller, reaktionsfähiger und effizienter zu machen – besonders bei lang laufenden oder blockierenden Aufgaben. | Threads werden verwendet, um Programme schneller, reaktionsfähiger und effizienter zu machen – besonders bei lang laufenden oder blockierenden Aufgaben. | ||
== Warum Threads? == | |||
* mehrere Aufgaben gleichzeitig bearbeiten (z. B. Download + Benutzeroberfläche) | * mehrere Aufgaben gleichzeitig bearbeiten (z. B. Download + Benutzeroberfläche) | ||
* schneller auf Benutzeraktionen reagieren | * schneller auf Benutzeraktionen reagieren | ||
| Zeile 11: | Zeile 9: | ||
* Hintergrundprozesse ausführen, ohne das Hauptprogramm zu blockieren | * Hintergrundprozesse ausführen, ohne das Hauptprogramm zu blockieren | ||
== Threads in Java erstellen == | |||
=== | === Thread durch Vererbung erstellen === | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
class MeinThread extends Thread { | class MeinThread extends Thread { | ||
| Zeile 24: | Zeile 22: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Thread über Runnable erstellen === | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
class Aufgabe implements Runnable { | class Aufgabe implements Runnable { | ||
| Zeile 35: | Zeile 33: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Lambda-Ausdruck (kurz) === | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
new Thread(() -> System.out.println("Lambda-Thread!")).start(); | new Thread(() -> System.out.println("Lambda-Thread!")).start(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Wichtige Thread-Methoden == | |||
* '''start()''' – Thread starten | * '''start()''' – Thread starten | ||
* '''run()''' – auszuführender Code (nicht direkt aufrufen!) | * '''run()''' – auszuführender Code (nicht direkt aufrufen!) | ||
| Zeile 47: | Zeile 45: | ||
* '''interrupt()''' – Thread unterbrechen | * '''interrupt()''' – Thread unterbrechen | ||
== Synchronisation == | |||
Wenn mehrere Threads auf dieselben Daten zugreifen, kann es zu Konflikten kommen. | Wenn mehrere Threads auf dieselben Daten zugreifen, kann es zu Konflikten kommen. | ||
Java bietet Mechanismen zur Synchronisation: | Java bietet Mechanismen zur Synchronisation: | ||
| Zeile 56: | Zeile 54: | ||
* Concurrent Collections (z. B. ConcurrentHashMap) | * Concurrent Collections (z. B. ConcurrentHashMap) | ||
== Risiken == | |||
* Deadlocks (Threads warten gegenseitig unendlich) | * Deadlocks (Threads warten gegenseitig unendlich) | ||
* Race Conditions (ungeklärte Zugriffsreihenfolge) | * Race Conditions (ungeklärte Zugriffsreihenfolge) | ||
| Zeile 62: | Zeile 60: | ||
* hoher Aufwand bei Synchronisation | * hoher Aufwand bei Synchronisation | ||
== Kurzmerksatz == | |||
'''Threads erlauben parallele Abläufe in einem Programm, müssen aber sorgfältig synchronisiert werden, um Fehler zu vermeiden.''' | '''Threads erlauben parallele Abläufe in einem Programm, müssen aber sorgfältig synchronisiert werden, um Fehler zu vermeiden.''' | ||
Aktuelle Version vom 12. Januar 2026, 14:15 Uhr
Ein Thread ist ein leichtgewichtiger Ausführungsstrang innerhalb eines Programms. Mehrere Threads können gleichzeitig laufen und ermöglichen parallele oder nebenläufige Ausführung von Aufgaben. Threads werden verwendet, um Programme schneller, reaktionsfähiger und effizienter zu machen – besonders bei lang laufenden oder blockierenden Aufgaben.
Warum Threads?
- mehrere Aufgaben gleichzeitig bearbeiten (z. B. Download + Benutzeroberfläche)
- schneller auf Benutzeraktionen reagieren
- Programme können moderne Mehrkern-Prozessoren besser ausnutzen
- Hintergrundprozesse ausführen, ohne das Hauptprogramm zu blockieren
Threads in Java erstellen
Thread durch Vererbung erstellen
class MeinThread extends Thread {
public void run() {
System.out.println("Thread läuft!");
}
}
new MeinThread().start();
Thread über Runnable erstellen
class Aufgabe implements Runnable {
public void run() {
System.out.println("Thread arbeitet!");
}
}
new Thread(new Aufgabe()).start();
Lambda-Ausdruck (kurz)
new Thread(() -> System.out.println("Lambda-Thread!")).start();
Wichtige Thread-Methoden
- start() – Thread starten
- run() – auszuführender Code (nicht direkt aufrufen!)
- sleep(ms) – pausieren
- join() – auf anderen Thread warten
- interrupt() – Thread unterbrechen
Synchronisation
Wenn mehrere Threads auf dieselben Daten zugreifen, kann es zu Konflikten kommen. Java bietet Mechanismen zur Synchronisation:
- synchronized
- Locks
- Semaphoren
- Concurrent Collections (z. B. ConcurrentHashMap)
Risiken
- Deadlocks (Threads warten gegenseitig unendlich)
- Race Conditions (ungeklärte Zugriffsreihenfolge)
- schwieriger zu testen und zu debuggen
- hoher Aufwand bei Synchronisation
Kurzmerksatz
Threads erlauben parallele Abläufe in einem Programm, müssen aber sorgfältig synchronisiert werden, um Fehler zu vermeiden.
