Thread bezieht sich auf einen Ausführungsprozess in einem Prozess. Ein Prozess kann mehrere Threads ausführen. Beispielsweise kann der Prozess java.exe viele Threads ausführen. Threads treten immer in einen Prozess ein, und mehrere Threads in einem Prozess teilen sich den Speicher des Prozesses.
Ein Thread in Java bezieht sich auf eine Instanz der java.lang.Thread-Klasse oder die Ausführung eines Threads. Verwenden Sie die Schnittstelle java.lang.Thread oder java.lang.Runnable, um Code zum Definieren, Instanziieren und Starten neuer Threads zu schreiben. (Empfohlenes Lernen: Java-Kurs )
Jeder Thread in Java verfügt über einen Aufrufstapel. Auch wenn er nicht im Programm erstellt wird, läuft der Thread im Hintergrund. Die main()-Methode wird in einem Thread ausgeführt, der als Hauptthread bezeichnet wird. Sobald ein neuer Thread erstellt wird, wird ein neuer Aufrufstapel generiert. Threads sind in zwei Kategorien unterteilt: Benutzer-Threads und Warte-Threads. Wenn die Ausführung aller Benutzerthreads abgeschlossen ist, wird die JVM automatisch heruntergefahren. Der Wartethread ist jedoch nicht unabhängig von der JVM. Der Wartethread wird im Allgemeinen vom Betriebssystem oder vom Benutzer erstellt.
Die Vorteile, die Threads für uns bringen
Wenn Threads rational eingesetzt werden können, werden Entwicklungs- und Wartungskosten reduziert und die Leistung komplexer Anwendungen kann sogar verbessert werden . Beispielsweise können in GUI-Anwendungen Ereignisse durch die asynchrone Natur von Threads besser verarbeitet werden; in Anwendungsserverprogrammen können mehrere Threads zur Bearbeitung von Client-Anfragen eingerichtet werden. Threads können sogar die Implementierung virtueller Maschinen vereinfachen. Beispielsweise läuft der Garbage Collector einer Java Virtual Machine (JVM) normalerweise in einem oder mehreren Threads. Daher verbessert die Verwendung von Threads unsere Anwendungen in den folgenden fünf Aspekten:1. Nutzen Sie die CPU-Ressourcen voll aus
Die meisten Computer auf der Welt verfügen jetzt nur noch über eine CPU . Daher ist es besonders wichtig, die CPU-Ressourcen voll auszunutzen. Beim Ausführen eines Single-Threaded-Programms kann die CPU im Leerlauf sein, während das Programm blockiert ist. Dies führt zu einer großen Verschwendung von Rechenressourcen. Die Verwendung von Multithreading in einem Programm kann andere Threads ausführen, wenn ein Thread schläft oder blockiert ist und die CPU zufällig im Leerlauf ist. Auf diese Weise ist es für die CPU schwierig, im Leerlauf zu sein. Daher werden die CPU-Ressourcen vollständig ausgenutzt.2. Vereinfachtes Programmiermodell
Wenn das Programm nur eine Aufgabe ausführt, schreiben Sie einfach ein Single-Threaded-Programm und schreiben Sie den Code gemäß den Schritten zur Ausführung Aufgabe Das ist es. Um aber mehrere Aufgaben zu erledigen, muss man, wenn man immer noch einen einzelnen Thread nutzt, im Programm festlegen, ob und wann jede Aufgabe ausgeführt werden soll. Es zeigt beispielsweise die Stunden, Minuten und Sekunden einer Uhr an. Wenn Sie einen einzelnen Thread verwenden, müssen Sie die Rotationszeit und den Winkel dieser drei Zeiger nacheinander in der Schleife beurteilen. Wenn drei Threads für die Anzeige dieser drei Zeiger verwendet werden, bedeutet dies, dass für jeden Thread eine separate Aufgabe ausgeführt wird. Dies hilft Entwicklern, das Programm zu verstehen und zu warten.3. Vereinfachen Sie die Verarbeitung asynchroner Ereignisse
Wenn eine Serveranwendung verschiedene Clientverbindungen empfängt, besteht die einfachste Möglichkeit, damit umzugehen, darin, für jeden Client eine Verbindung zu erstellen . Der Listening-Thread ist dann weiterhin dafür verantwortlich, auf Anfragen des Clients zu lauschen. Wenn diese Art von Anwendung von einem einzelnen Thread verarbeitet wird und der hörende Thread eine Clientanforderung empfängt, beginnt er, die vom Client gesendeten Daten zu lesen. Nach dem Lesen der Daten befindet sich die Lesemethode in einem Block Zustand, auch Das heißt, dieser Thread kann keine Clientanforderungen mehr abhören. Um mehrere Client-Anfragen in einem einzelnen Thread zu verarbeiten, müssen Sie nicht blockierende Socket-Verbindungen und asynchrone E/A verwenden. Allerdings ist die Verwendung asynchroner E/A schwieriger zu steuern und fehleranfälliger als die Verwendung synchroner E/A. Daher erleichtert die Verwendung von Multithreading und synchroner E/A die Handhabung asynchroner Ereignisse wie mehrerer Anfragen.4. Machen Sie die GUI effizienter
Wenn Sie einen einzelnen Thread zur Verarbeitung von GUI-Ereignissen verwenden, müssen Sie eine Schleife verwenden, um nach GUI-Ereignissen zu suchen, die jederzeit auftreten können Zeit in der Schleife Zusätzlich zum internen Scannen von GUI-Ereignissen muss es auch andere Programmcodes ausführen. Wenn der Code zu lang ist, werden die GUI-Ereignisse „eingefroren“, bis der Code ausgeführt wird. In modernen GUI-Frameworks (wie SWING, AWT und SWT) wird ein separater Event Dispatch Thread (EDT) zum Scannen von GUI-Ereignissen verwendet. Wenn wir eine Schaltfläche drücken, wird die Click-Event-Funktion der Schaltfläche in diesem Event-Dispatch-Thread aufgerufen. Da die Aufgabe von EDT nur darin besteht, GUI-Ereignisse zu scannen, ist die Reaktion auf Ereignisse auf diese Weise sehr schnell.5. Kosten sparen
Es gibt im Allgemeinen drei Möglichkeiten, die Ausführungseffizienz des Programms zu verbessern:
(1 ) Erhöhen Sie die Anzahl der CPUs des Computers. (2) Mehrere Prozesse für ein Programm starten (3) Multithreading im Programm verwenden.Das obige ist der detaillierte Inhalt vonWas ist ein Thread in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!