Heim  >  Artikel  >  Java  >  Wie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text)

Wie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text)

不言
不言Original
2018-09-17 15:18:242070Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Implementierung von Threads in Java. Die Implementierungsmethode von Java-Threads (Bilder und Texte) hat einen gewissen Referenzwert. Ich hoffe, dass sie für Sie hilfreich ist.

Prozesse und Threads

In herkömmlichen Betriebssystemen ist das Kernkonzept „Prozess“, und ein Prozess ist eine Abstraktion eines laufenden Programms.
Die Existenz von Prozessen ermöglicht „Parallelität“ In einem Betriebssystem ist die Ausführung mehrerer Prozesse zulässig, und diese Prozesse „scheinen“ gleichzeitig zu laufen.
Wenn auf unserem Computer mehrere Prozesse wie Webbrowser, E-Mail-Client, Instant-Messaging-Software wie QQ WeChat usw. ausgeführt werden, gehen wir davon aus, dass dieser Computer mit mehreren Prozessen ausgestattet ist CPU oder Multi-Core-CPU, dann ist dieses Phänomen der Parallelität mehrerer Prozesse möglicherweise überhaupt nicht überraschend. Es ist durchaus möglich, jedem Prozess eine CPU zuzuweisen und so Multiprozessparallelität zu erreichen.
Wenn der Computer jedoch nur über eine CPU verfügt, kann es beim Menschen auch das Gefühl geben, dass mehrere Prozesse gleichzeitig laufen. Aber menschliche Gefühle sind oft vage und ungenau. Tatsache ist, dass die CPU aufgrund ihrer hohen Rechengeschwindigkeit schnell zwischen Prozessen wechseln kann. Zu einem bestimmten Zeitpunkt kann die CPU nur einen Prozess ausführen, aber innerhalb einer Sekunde kann sie schnell zwischen Prozessen wechseln, sodass dies möglich ist Erzeugt die Illusion, dass mehrere Prozesse gleichzeitig laufen.
Warum wird im Betriebssystem das Konzept des Threads vom Prozess abgeleitet?

  1. Da bei einigen Prozessen mehrere Aktivitäten darin stattfinden, können einige Aktivitäten zu einem bestimmten Zeitpunkt blockiert werden und einige Aktivitäten nicht, wenn diese Aktivitäten durch Threads getrennt sind. Wenn Sie sie aktivieren Durch die parallele Ausführung wird es einfacher, das Programm zu entwerfen.

  2. Threads sind leichter als die Prozesserstellung und verbrauchen weniger Leistung

  3. Wenn ein Prozess sowohl CPU-Berechnungen als auch E/A-Verarbeitung erfordert, sind mehrere Threads erforderlich Threads ermöglichen die Überlappung dieser Aktivitäten und beschleunigen so die Ausführung des gesamten Prozesses.

Jeder Prozess verfügt über einen unabhängigen Speicheradressraum im Betriebssystem. Alle vom Prozess erstellten Threads teilen sich diesen Speicher. Ein Betriebssystem, das Multithreading unterstützt, ermöglicht die Funktion von Threads kleinste Einheit der CPU-Planung. CPU-Zeitscheiben werden auf verschiedene Threads aufgeteilt.

Mögliche Implementierungsmethoden von Threads

Grundsätzlich unterstützen Mainstream-Betriebssysteme Threads und stellen auch Thread-Implementierungen bereit. Um den Unterschieden zwischen verschiedenen Hardware- und Betriebssystemen gerecht zu werden, bietet die Java-Sprache eine einheitliche Abstraktion von Thread-Operationen. In Java verwenden wir die Thread-Klasse, um einen Thread darzustellen.
Die spezifische Implementierung von Thread kann unterschiedliche Implementierungsmethoden haben:

Verwendung von Kernel-Threads zur Implementierung

Kernel-Threads sind Threads, die vom Betriebssystemkernel unterstützt werden. Im Kernel gibt es eine Thread-Tabelle Zum Aufzeichnen aller Threads im System sind Systemaufrufe erforderlich, und dann wird die Thread-Tabelle im Kernel aktualisiert. Das Blockieren von Kernel-Threads und anderen Vorgängen erfordert Systemaufrufe. Systemaufrufe sind relativ teuer und erfordern das Hin- und Herwechseln zwischen Benutzermodus und Kernelmodus. Darüber hinaus gibt es im Kernel einen Thread-Scheduler, der bestimmt, welchem ​​Thread die CPU-Zeitscheibe zugewiesen werden soll.
Programme bedienen den Kernel-Thread im Allgemeinen nicht direkt, sondern verwenden eine High-Level-Schnittstelle des Kernel-Threads, einen einfachen Prozess. Die Beziehung zwischen Lightweight-Prozessen und Kernel-Threads ist 1:1. Jeder Lightweight-Prozess wird von einem Kernel-Thread unterstützt.

Wie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text)

In der obigen Abbildung bezieht sich LWP auf Light Weight Process, also Lightweight Process, also auf Kernel Level Thread, also Kernel Faden.

Verwenden Sie Benutzer-Threads zur Implementierung

Benutzer-Threads sind Thread-Bibliotheken, die vom Programm oder der Programmiersprache selbst implementiert werden, und der Systemkernel kann die Existenz dieser Threads nicht erkennen. Das Einrichten, Synchronisieren, Zerstören und Planen von Benutzerthreads erfolgt im Benutzermodus ohne die Hilfe des Kernels und ohne Systemaufrufe. Dies hat den Vorteil, dass der Betrieb von Threads sehr effizient ist. In diesem Fall beträgt das Verhältnis von Prozessen zu Benutzer-Threads 1:N.

Wie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text)

Das Blockieren eines Benutzermodus-Threads wird auch den gesamten Prozess blockieren verliert seine Bedeutung. Aufgrund der fehlenden Kernel-Unterstützung erfordern viele Aufgaben, die die Verwendung des Kernels erfordern, wie das Blockieren und Aufwecken von Threads, die Thread-Zuordnung in einer Umgebung mit mehreren CPUs usw., die Implementierung durch Benutzerprogramme, was äußerst schwierig ist implementieren.

Verwenden Sie eine Hybridimplementierung von Benutzer-Threads und Kernel-Threads

In dieser Hybrid-Implementierung gibt es sowohl Benutzer-Threads als auch Kernel-Threads. Die Vorgänge zum Erstellen und Wechseln von Benutzermodus-Threads sind immer noch sehr effizient, und im Benutzermodus implementierte Threads erleichtern das Erhöhen der Thread-Größe. Funktionen, die Unterstützung vom Betriebssystemkernel erfordern, werden über Kernel-Threads implementiert, z. B. die Zuordnung zu verschiedenen Prozessoren, das Blockieren und Aufwecken von Verarbeitungsthreads sowie die Kernel-Thread-Planung. Diese Implementierung wird weiterhin den leichtgewichtigen Prozess LWP verwenden, der die Brücke zwischen Benutzer-Threads und Kernel-Threads darstellt.

Wie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text)

Implementierung von Java-Threads

Vor JDK1.2 wurden Java-Threads mithilfe von Benutzer-Threads implementiert dass Java mithilfe des vom Betriebssystem nativ unterstützten Threading-Modells implementiert wurde. Die Implementierung des Java-Threading-Modells hängt hauptsächlich vom Betriebssystem ab. Für Oracle JDK wird das Threading-Modell unter Windows und Linux eins zu eins implementiert, d. h. ein Java-Thread wird einem leichtgewichtigen Prozess (Kernel-Thread) zugeordnet. Auf der Solaris-Plattform unterstützt Java 1:1- und N:M-Thread-Modelle.

Thread-Blockierung und Warten

Der Status von Threads in Java ist wie folgt: Neu, Ausführbar, Wartend, Zeitgesteuertes Warten, Blockiert, Beendet.

Wie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text)

  • NEU: Thread wird zunächst erstellt und läuft nicht

  • RUNNABLE: Thread läuft, verbraucht aber nicht unbedingt CPU

  • BLOCKIERT: Der Thread wartet darauf, dass ein anderer Thread die Sperre aufhebt

  • WARTET: Der Thread wurde ausgeführt wait, join, LockSupport.park()-Methode

  • TIMED_WAITING: Der Thread ruft Sleep, Wait, Join, LockSupport.parkNanos() und andere Methoden auf. Diese Methoden unterscheiden sich vom Status WAITING haben Darstellungszeitparameter.

Ein wichtiger Unterschied zwischen „Blockiert“ und „Wartend“ besteht darin, dass ein Thread im Status „Blockiert“ darauf wartet, eine exklusive Sperre zu erhalten. Beispielsweise wartet ein Thread darauf, einen kritischen Abschnitt zu betreten, der von der Sperre umgeben ist Mit dem Schlüsselwort „synced“ wechselt es in den Status „Blockiert“. Der Wartezustand wartet darauf, geweckt zu werden, oder wartet auf einen bestimmten Zeitraum.

Das obige ist der detaillierte Inhalt vonWie implementiert man Threads in Java? Implementierungsmethode des Java-Threads (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn