Wie erstelle ich einen Thread in Java? | Multithreading in Java

Veröffentlicht: 2020-12-29

In diesem Artikel werfen wir einen Blick auf das Threading in Java und untersuchen die Mechanismen, die das Threading ermöglichen.

Inhaltsverzeichnis

Threading in Java

Die Threading-Funktion in Java ist ein leichtgewichtiger Unterprozess. Sie gilt als die kleinste Verarbeitungseinheit. Es ist ein Mittel, um Multitasking in einem Programm zu erreichen. Es ist eine nützliche Funktion, wenn es um Spiele, Animationen usw. geht.

Java verfügt über eine integrierte Unterstützung zum Erstellen von Threads und Multi-Threads. Dies ist ein cleverer Ansatz zur Minimierung von Ineffizienzen und Schleppen durch optimale Nutzung des CPU-Platzes. In Java kann dies auf zwei Arten erfolgen:

  1. Thread-Klasse erweitern, oder
  2. Implementieren Sie eine lauffähige Schnittstelle

Wenn mehrere Threads gleichzeitig ausgeführt werden, spricht man von Multithreading. Dies ermöglicht im Wesentlichen, dass mehrere Teile eines Programms gleichzeitig ausgeführt werden, jeder Teil eines Threads und jeder Thread folgt einem bestimmten Pfad zur Ausführung.

Threads nutzen gemeinsam genutzten Speicherplatz; Speicher wird nicht jedem Teil zugewiesen, was zu einer maximalen Auslastung der CPU führt. Außerdem nimmt das Ändern von Kontexten nicht viel Zeit in Anspruch. Allerdings könnten zu viele Threads Ihre CPU mit Kontextwechseln belasten und Ihre Ausführung könnte verzögert werden.

Ein Thread kann in einem der folgenden sechs Zustände existieren

  1. NEU – Sobald ein Thread erstellt wurde, existiert er im neuen Zustand. Es bedeutet im Wesentlichen, dass der Thread noch mit der Ausführung beginnen muss.
  2. RUNNING – Wenn ein Thread ausgeführt wird oder ausgeführt werden soll, befindet er sich im Status „Running“.
  3. WAITING – ein laufender Thread wird manchmal angehalten oder ausgesetzt, damit eine andere Aktivität stattfinden kann. Eine Version von wait() oder join() ohne Timeout kann die Ausführung eines Threads aussetzen. Sobald die Aktion aufgetreten ist, wird ein unterbrochener Thread wieder aufgenommen.
  4. TIMED-WAITING – ein laufender Thread wird manchmal vorübergehend angehalten oder für eine bestimmte Dauer ausgesetzt. Zum Beispiel, wenn die Funktion sleep() aufgerufen wird.
  5. BLOCKED – Wenn ein angehaltener Java-Thread eine bestimmte Ressource nicht abrufen kann, wird er blockiert und befindet sich im blockierten Zustand.
  6. BEENDET – Wenn ein Thread seine Ausführung abgeschlossen hat, befindet er sich im beendeten Zustand. Sie können einen Thread jedoch jederzeit beenden.

Erfahren Sie mehr über Java-Architektur und -Komponenten.

Vorteile der Erstellung eines Threads in Java

Das Erstellen von Threads hat mehrere Vorteile. Einige davon sind

  1. Da Threads unabhängig sind, wirkt sich eine Ausführung nicht auf eine andere aus, selbst wenn sie auf gemeinsam genutztem Speicherbereich arbeiten. Das bedeutet auch, dass Sie mehr als eine Operation gleichzeitig ausführen können.
  2. Threading ist eine Form von Multitasking und spart Zeit.
  3. Ein Fehler in einem Thread wirkt sich nicht auf einen anderen aus.

Wie erstelle ich einen Thread in Java?

Wie oben erläutert, gibt es zwei Möglichkeiten, dies zu tun: Thread-Klasse erweitern oder ausführbare Schnittstelle implementieren

Thread-Klasse

Es gibt Konstruktoren und Methoden in der Thread-Klasse, mit denen Sie Operationen ausführen, Threads verwalten und verfolgen können. Es erweitert die Object-Klasse, die dann die begleitende Runnable-Schnittstelle implementiert. Die in der Threadklasse vorhandenen Konstruktoren sind :Thread(), Thread(String name), Thread(Runnable r) und Thread(Runnable r, String name).

Es folgen die Methoden und ihre Beschreibungen

Methode Wofür wird verwendet?
Anfang() Startet die Ausführung
Lauf() Um eine Aktion für einen Thread auszuführen
Schlaf() Versetzt einen Thread für eine bestimmte Dauer in den Ruhezustand
beitreten() Warten Sie, bis ein anderer Thread beendet wird
getPriority() Um die Priorität eines bestimmten Threads anzugeben
Priorität setzen() Um die Priorität eines bestimmten Threads zu ändern
getName() Um den Namen eines angegebenen Threads zurückzugeben
Name einsetzen() Um den Namen des angegebenen Threads zu ändern
getId() Gibt die ID eines bestimmten Threads zurück
ist am Leben() Um zu testen, ob ein Thread in irgendjemandem noch vorhanden ist, heißt es
Ertrag() Hält die Ausführung eines Thread-Objekts an, damit andere Threads ausgeführt werden können
aussetzen() Um einen bestimmten Thread zu unterbrechen
fortsetzen() Fortsetzen eines Threads aus dem angehaltenen Zustand
Stop() Um einen bestimmten Thread zu stoppen
zerstören() Um Thread-Gruppen und Untergruppen zu zerstören
unterbrechen() Um eine Unterbrechung der Thread-Ausführung zu verursachen
istunterbrochen() Testen, ob die Ausführung eines bestimmten Threads unterbrochen wird
unterbrochen () Testen, ob die Ausführung des aktuellen Threads unterbrochen ist
activeCount() Um die Anzahl der aktiven Threads in einer Thread-Gruppe zurückzugeben
holdLock() Es gibt true zurück, wenn und nur wenn der aktuelle Thread die Monitorsperre für das angegebene Objekt hält.
getState() Um den Status eines bestimmten Threads zu bestimmen
setContextClassLoader() So setzen Sie den Kontext ClassLoader
getContextClassLoader() Um den Kontext ClassLoader zurückzugeben

Um einen Thread durch Erweitern der Klasse Thread zu erstellen, muss zunächst eine Klasse erstellt werden, die die Klasse java.lang.Thread erweitert. Diese Klasse ist so definiert, dass sie die Methode run() überschreibt. Als nächstes wird ein Objekt in der neuen Klasse erstellt, woraufhin die Methode start() aufgerufen wird, um die Ausführung des Threads zu beginnen.

Muss gelesen werden: Pattern-Programme in Java, die Sie auschecken sollten

Lauffähige Schnittstelle

Dies ist der einfachste Weg, einen Thread zu erstellen. Zur Implementierung des Runnable Interface ist nur eine Methode erforderlich: run()

Um es zu erklären, schreiben wir

öffentliche Leere ausführen ()

Innerhalb von run( ) fahren wir fort, den Code zu schreiben, um einen neuen Thread zu erstellen.

Melden Sie sich für Software Engineering-Kurse an den besten Universitäten der Welt an. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Thread-Klasse vs. ausführbare Schnittstelle

Die Thread-Klasse hindert Sie daran, andere Klassen zu erweitern. Dies liegt daran, dass Mehrfachvererbung in Java nicht möglich ist. Dies ist jedoch nicht der Fall, wenn wir das Runnable-Interface implementieren, bei dem Sie andere Klassen weiter erweitern.

Das Erweitern der Thread-Klasse macht Ihnen mehrere wichtige Methoden zugänglich, die die Funktionalität eines Threads verbessern. Zum Beispiel yield(), stop(), isalive(), interrupt(). Die Runnable-Schnittstelle hat nur eine ziemlich einschränkende Methode.

Einpacken

Wenn Sie mehr über Java und die Full-Stack-Softwareentwicklung erfahren möchten, schauen Sie sich das Executive PG-Programm in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenges Training bietet, 9+ Projekte und Aufgaben, IIIT-B-Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Landen Sie in Ihrem Traumjob

Bewerben Sie sich jetzt für den Master in Software Engineering