Direkt zum Inhalt
Urkunden
Java SchlüsselwörterJava-ArraysJava Objektorientierte ProgrammierungJava File HandlingEinführung in JavaGrundlagen der Java-Sprache

Java-Threads

Java-Threads sind ein grundlegender Teil des Gleichzeitigkeitsmodells von Java, mit dem mehrere Aufgaben gleichzeitig in einem Programm ausgeführt werden können. Ein Thread ist ein leichtgewichtiger Prozess, der die parallele Ausführung von Code ermöglicht und so die Leistung und Reaktionsfähigkeit der Anwendung verbessert, vor allem in Multicore-Systemen.

Verwendung

Threads werden in Java verwendet, um Hintergrundoperationen durchzuführen, ohne den Hauptprogrammfluss zu unterbrechen. Sie sind ideal für Aufgaben wie das Verarbeiten von Benutzereingaben, das Ausführen von Berechnungen oder das gleichzeitige Verwalten von E/A-Operationen.

Threads erstellen

Java bietet zwei primäre Möglichkeiten, um Threads zu erstellen:

  1. Erweitern der Klasse Thread
  2. Die Implementierung der Schnittstelle Runnable

Beispiele

Beispiel 1: Ausweitung der Thread Klasse


class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running.");
    }

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}
    

In diesem Beispiel erweitert eine neue Klasse MyThread die Klasse Thread und überschreibt die Methode run(). Die Methode start() wird aufgerufen, um die Ausführung des Threads zu beginnen, der intern die Methode run() aufruft.

Beispiel 2: Die Umsetzung der Runnable Schnittstelle


class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Thread is running.");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }
}
    

Hier implementiert die Klasse MyRunnable die Schnittstelle Runnable und bietet die Methode run(). Ein Thread Objekt wird mit einer Instanz von MyRunnable erstellt und mit der Methode start() gestartet.

Beispiel 3: Lambda-Ausdrücke verwenden


public class LambdaThreadExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            System.out.println("Thread is running using lambda.");
        });
        thread.start();
    }
}
    

Dieses Beispiel demonstriert die Erstellung eines Threads mithilfe der Lambda-Ausdrücke von Java 8, die die Syntax für die Implementierung der Schnittstelle Runnable vereinfachen.

Tipps und bewährte Praktiken

  • Gewindesicherheit: Stelle sicher, dass der Zugriff auf gemeinsame Ressourcen thread-sicher erfolgt, um Dateninkonsistenzen und Race Conditions zu vermeiden. Verwende Synchronisationsmechanismen wie synchronized blocks oder ReentrantLock.
    
    synchronized (lockObject) {
        // critical section
    }
                
  • Vermeide eine Überbeanspruchung: Wenn du zu viele Threads erstellst, kann das zur Erschöpfung der Ressourcen führen. Verwende Thread-Pools (z.B. ExecutorService), um Threads effizient zu verwalten.
    
    ExecutorService executor = Executors.newFixedThreadPool(10);
    executor.execute(new MyRunnable());
    executor.shutdown();
                
  • Gnadenlose Beendigung: Implementiere einen Mechanismus zur ordnungsgemäßen Beendigung von Threads, wenn sie nicht mehr benötigt werden. Verwende Flags oder Interrupts, um Threads das Anhalten zu signalisieren.
    
    class MyRunnable implements Runnable {
        private volatile boolean running = true;
    
        public void run() {
            while (running) {
                // perform task
            }
        }
    
        public void stop() {
            running = false;
        }
    }
                
  • Verwenden Sie übergeordnete Gleichzeitigkeitsprogramme: Ziehe in Erwägung, die Java-Hilfsprogramme für Gleichzeitigkeit aus dem Paket java.util.concurrent zu verwenden, z. B. CountDownLatch, CyclicBarrier und ConcurrentHashMap, um komplexe Gleichzeitigkeitsaufgaben zu vereinfachen.
  • Behandle Ausnahmen: Behandle Ausnahmen immer innerhalb der Methode run(), um ein unerwartetes Beenden des Threads zu verhindern.
    
    public void run() {
        try {
            // perform task
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
                

Java Grundlagen lernen

Baue deine Java-Kenntnisse von Grund auf auf und beherrsche Programmierkonzepte.
Kostenloses Lernen beginnen