Threads

In Java gibt es die Möglichkeit Programme mittels Threads, quasi gleichzeitig auszuführen. Gängige CPUs haben mehrere Kerne. Ein Thread kann genau von einem Kern berechnet werden. Mit dieser Erkenntnis können nun also mehrere Kerne in Anspruch genommen werden. Ein Thread kann mit dem Befehl Thread.start() gestartet werden und ist solange aktiv, bis die run() Methode abgearbeitet wurde.

Threads werden in Java mit Paketen implementiert. Diese enthalten Operation zum Erstellen, Zerstören und Synchronisieren der Threads. Es gibt 2 Möglichkeiten Threads zu definieren.

Durch Ableiten der Klasse Thread

public class Thread_Grundlagen extends Thread {

    public void run() {
        System.out.println("Hello World");
    }
    
    public static void main(String[] args) {
        Thread_Grundlagen t = new Thread_Grundlagen();
        t.start();
        
        // oder ohne Zwischenspeicherung der Objektreferenz: 
        // new Thread_Grundlagen().start();
    }
}				
	

oder durch Implementierung der Schnittstelle runnable

public class Thread_Grundlagen extends Thread {

    public void run() {
        System.out.println("Hello World");
    }
    
    public static void main(String[] args) {
        Thread_Grundlagen runner = new Thread_Grundlagen();
        Thread t = new Thread(runner);
        t.start();
    }
}	

Beispiele zu Threads in Java

An folgendem Beispiel sollen pro Thread 5 Zeilen ausgegeben werden. Man könnte nun erwarten, dass zunächst die ersten 5 Zeilen des ersten Threads und anschließend die nächsten 5 Zeilen des zweiten Threads ausgegeben werden. Dem ist nicht so - da die Threads parallel laufen, ist die Reihenfolge abhängig von der CPU und deren Kerne. Der Ablauf und die Ausgabe sind bei jedem Aufruf unterschiedlich.

public class Java_threads extends Thread {

    public void run() {
        for(int i=0 ; i<=5 ; i++) {
            System.out.println("Zeile: " + i);
        }
        System.out.println("Ende\n");
    }
    public static void main(String[] args) throws InterruptedException {
            Java_threads t1 = new Java_threads();
            Java_threads t2 = new Java_threads();
            t1.start();
            t2.start();
    }
}	

Ausgabe
Zeile: 0
Zeile: 1
Zeile: 2
Zeile: 3
Zeile: 4
Zeile: 5
Zeile: 0
Zeile: 1
Zeile: 2
Zeile: 3
Ende

Zeile: 4
Zeile: 5
Ende

Zweites Beispiel

public class Java_threads_constructor extends Thread {
    private String farbe;
    private int anzahl;
    
    public Java_threads_constructor(String farbe, int anzahl) {
        this.farbe = farbe;
        this.anzahl = anzahl;
    }
    public void run() {
        for(int i=0 ; i<anzahl ; i++) {
            System.out.println(farbe);
        }
    }
    
    public static void main(String[] args) {
        Java_threads_constructor t1 = new Java_threads_constructor("Rot", 5);
        Java_threads_constructor t2 = new Java_threads_constructor("Blau", 7);
        t1.start();
        t2.start();
    }
}	

Werbung

keyboard_arrow_left

Vorheriger Artikel

Datenstrukturen

Queue, Stack, einfach und doppelt verkettete Liste

Werbung

Mit Programmier-Skills perfekt für die Zukunft aufgestellt! Die Kurse gehen schon bei 11,99 € los!
Top-Online-Kurse in „IT & Software“