Heim  >  Artikel  >  Java  >  Zusammenfassung und Analyse des Multithreading-Wissens in Java

Zusammenfassung und Analyse des Multithreading-Wissens in Java

不言
不言Original
2018-09-18 17:17:151703Durchsuche

Der Inhalt dieses Artikels ist eine Zusammenfassung und Analyse des Multithreading-Wissens in Java. Ich hoffe, dass er für Freunde hilfreich ist.

Prozessübersicht

  1. Prozess: Ein laufendes Programm ist eine unabhängige Einheit zur Ressourcenzuweisung und zum Aufruf durch das System.

  2. Ein Prozess ist ein dynamischer Ausführungsprozess eines Programms auf einem Datensatz.

  3. Ein Prozess besteht im Allgemeinen aus drei Teilen: Programm, Datensatz und Prozesssteuerungsblock.

  4. Jeder Prozess verfügt über seinen eigenen Speicherplatz und seine eigenen Systemressourcen.

  5. Das von uns geschriebene Programm wird verwendet, um zu beschreiben, welche Funktionen der Prozess ausführen möchte und wie er ausgeführt werden soll.

  6. Der Datensatz ist was Das Programm verwendet Ressourcen, die während der Ausführung verwendet werden sollen Verwenden Sie es, um den Prozess zu steuern und zu verwalten. Es handelt sich um einen systembewussten Prozess. Die eindeutige Kennung ist vorhanden.

  7. Beispiel für den Prozess:

  8. (1) Stellen Sie sich vor, ein Informatiker mit guten Kochkenntnissen backt einen Geburtstagskuchen für seine Tochter

    (2) Er hat ein Rezept zum Backen einer Geburtstagstorte und hat die nötigen Zutaten in der Küche: Mehl, Eier, Zucker usw.
  9. (3) In dieser Metapher ist das Kuchenrezept das Programm
(4) Der Informatiker ist die Prozessor-CPU

(5) Die verschiedenen Rohstoffe für die Herstellung des Kuchens sind die Eingabedaten.
(6) Der Prozess ist die Summe einer Reihe von Aktionen, bei denen der Koch das Rezept liest, verschiedene Zutaten beschafft und den Kuchen backt.
(7) Nehmen wir nun an, dass der Sohn des Informatikers weinend herauskommt und sagt, dass sein Kopf von einer Biene gestochen wurde;
(8) Der Informatiker zeichnet auf, was er gemäß dem Rezept getan hat, und zwar zum Speichern den aktuellen Stand des Prozesses;
(9) Nehmen Sie dann ein Erste-Hilfe-Handbuch heraus und befolgen Sie die Anweisungen zur Behandlung des Stichs.
(10) Zu diesem Zeitpunkt werden wir sehen, wie der Prozessor von einem Prozess zum anderen wechselt -Prioritätsprozesse;
(11) Jeder Prozess hat sein eigenes Programm (Rezepte und Erste-Hilfe-Handbücher); (12) Nachdem der Bienenstich behandelt wurde, kommt der Informatiker zurück, um Kuchen zu backen; 13) Machen Sie dort weiter, wo er aufgehört hat.

Thread-Übersicht

Die Entstehung von Threads dient dazu, den Verbrauch von Kontextwechseln zu reduzieren und die Parallelität des Systems zu verbessern.

Threads durchbrechen den Mangel, dass ein Prozess nur eine Sache tun kann, und ermöglichen so eine prozessinterne Parallelität.

Beispielthread:

(1) Angenommen, ein Textprogramm muss Tastatureingaben empfangen, den Inhalt auf dem Bildschirm anzeigen und die Informationen auf der Festplatte speichern.

(2) Wenn es nur einen Prozess gibt, entsteht zwangsläufig die Peinlichkeit, nur eine Sache gleichzeitig tun zu können, was bedeutet, dass beim Speichern keine Tastatureingabe möglich ist

(3) Wenn mehrere Prozesse vorhanden sind, ist jeder Prozess für eine Aufgabe verantwortlich. (4) Prozess A ist für die Tastatureingabe verantwortlich, Prozess B ist für die Anzeige von Inhalten auf dem Bildschirm verantwortlich und Prozess C ist für das Speichern von Inhalten auf der Festplatte verantwortlich Festplatte;

(5) Die Zusammenarbeit zwischen A, B und C beinhaltet hier Prozesskommunikationsprobleme, und alle benötigen denselben Inhalt: Textinhalte;

(7) Wenn es einen Mechanismus gibt, der es A, B und C ermöglicht, Ressourcen zu teilen

(8) Auf diese Weise müssen weniger Inhalte für den Kontextwechsel gespeichert und wiederhergestellt werden

(9 ) Gleichzeitig kann es den durch die Kommunikation verursachten Leistungsverlust reduzieren.
(10) Dieser Mechanismus ist Thread.

Threads werden auch Lightweight-Prozesse genannt.

Es handelt sich um eine grundlegende CPU-Ausführungseinheit und die kleinste Einheit im Programmausführungsprozess.

Bestehend aus Thread-ID, Programmzähler, Registersatz und Stapel

Die Einführung von Threads reduziert den Overhead der gleichzeitigen Ausführung von Programmen und verbessert die Parallelitätsleistung des Betriebssystems.

Threads haben keine eigenen Systemressourcen.

Die Beziehung zwischen Prozess und Thread

Ein Prozess ist eine laufende Aktivität eines Programms im Computer für eine bestimmte Datensammlung.

Der Prozess ist die Grundeinheit der Ressourcenzuweisung und -planung im System und die Grundlage der Betriebssystemstruktur

  1. Ein Thread ist ein Entität des Prozesses und ist die Grundeinheit der CPU-Planung und -Verteilung

  2. Ein Thread ist eine Grundeinheit, die kleiner als ein Prozess ist und unabhängig ausgeführt werden kann

  3. Die Beziehung zwischen Prozessen und Threads:

  4. (1) Ein Thread kann nur zu einem Prozess gehören, und ein Prozess kann mehrere Threads haben, aber es gibt mindestens einen Thread

    (2) Ressourcen werden Prozessen zugewiesen, derselbe Prozess Alle Threads teilen sich alle Ressourcen des Prozesses
  5. (3) Die CPU wird den Threads zugewiesen, das heißt, was tatsächlich auf der CPU ausgeführt wird, ist der Thread
  6. Funktionsprinzip des Java-Programms

Der Java-Befehl startet die Java Virtual Machine, also die JVM, was dem Starten einer Anwendung entspricht, also Starten eines Prozesses;

Der Prozess startet automatisch einen Hauptthread;

  1. Dann ruft der Hauptthread die Hauptmethode einer bestimmten Klasse auf.

  2. Die Hauptmethode wird also im Hauptthread ausgeführt, und alle Programme davor sind Single-Threaded.

  3. JVM-Startup ist Multi-Threaded:

(1) Da der Garbage-Collection-Thread auch beim Start der JVM gestartet werden muss, kommt es sonst leicht zu einem Speicherüberlauf
(2) Der aktuelle Garbage-Collection-Thread plus der vorherige Hauptthread Es werden mindestens zwei Threads gestartet, sodass der Start von JVM mehrere Threads umfasst.

Der Inhalt im Zusammenhang mit Multithreading ist in mehrere Teile unterteilt:

  1. Machen Sie sich bereit: der Status des Threads

  2. Methode der inneren Stärke: Methoden (Mechanismen), die jedes Objekt hat

  3. Taizu Changquan: Grundlegende Fadenklasse

  4. Neun-Yin-Handbuch: Fortgeschrittene Multi- Thread-Kontrollklasse

Zhaomabu: Thread-Status (fünf Typen)

  1. Neu: Neuer Status, wenn das Thread-Objekt erstellt wird, das heißt, Geben Sie den neuen Status ein, z. B.: Thread t = new MyThread()

  2. Runnable: Bereitstatus, wenn die start()-Methode (t.start()) des Thread-Objekts ist aufgerufen, Der Thread wechselt in den Bereitschaftszustand. Der Thread im Bereitschaftszustand bedeutet nur, dass der Thread jederzeit bereit ist und auf die Ausführung der CPU-Planung wartet. Dies bedeutet nicht, dass der Thread sofort nach der Ausführung von t.start()

  3. Läuft: Laufzustand: Wenn die CPU beginnt, Threads im Bereitschaftszustand zu planen, kann der Thread zu diesem Zeitpunkt tatsächlich ausgeführt werden, dh er wechselt in den Laufzustand.

  4. Blockiert: Blockierter Zustand. Aus irgendeinem Grund gibt der Thread im laufenden Zustand vorübergehend das Recht auf, die CPU zu verwenden, und wechselt zu diesem Zeitpunkt in den blockierten Zustand Es geht in den Bereitschaftszustand über, es besteht die Möglichkeit, von der CPU erneut aufgerufen zu werden, um in den Laufzustand zu gelangen.

  5. Tot: Todeszustand, der Thread hat die Ausführung abgeschlossen oder den Lauf verlassen ()-Methode aufgrund einer Ausnahme und der Thread hat seinen Lebenszyklus beendet

  6. Hinweis:

    (1) Der Bereitschaftszustand ist der einzige Zugang zum laufenden Zustand

    (2) Wenn ein Thread zur Ausführung in den laufenden Zustand wechseln möchte, muss er sich zunächst im Bereitschaftszustand befinden
    (3) Je nach Ursache der Blockierung kann der Blockierungszustand in drei Typen unterteilt werden :
    [1] Warten auf Blockierung: Der Thread im laufenden Zustand führt die Methode wait() aus, wodurch dieser Thread in den Wartezustand wechselt.
    [2] Synchrone Blockierung: Wenn der Thread nicht erfasst werden kann Die synchronisierte Synchronisationssperre (da die Sperre von anderen Threads belegt ist) wechselt in den synchronisierten Blockierungsstatus
    [3] Andere Blockierung: Durch Aufrufen von sleep() oder bei join() des Threads oder einer E/A-Anfrage ausgegeben, wechselt der Thread in den Blockierungsstatus. Wenn der Zustand „sleep()“ abläuft, wartet „join()“ darauf, dass der Thread beendet wird oder abläuft oder die E/A-Verarbeitung abgeschlossen ist, und der Thread wechselt wieder in den Bereitschaftszustand


Inner Power Heart-Methode: Jedes Objekt verfügt über Methoden

synchronisiert, warten und benachrichtigen sind Synchronisierungswerkzeuge, die jedes Objekt hat

Überwachen:

( 1) wird auf Synchronisierungsprobleme angewendet. Künstliches Thread-Planungstool

(2) Jedes Java-Objekt verfügt über einen Monitor, um den Wiedereintritt von gleichzeitigem Code zu überwachen.
(3) Der Monitor funktioniert nicht, wenn er in Nicht-Multithreads codiert. Im Gegenteil, wenn er innerhalb des synchronisierten Bereichs liegt, funktioniert der Monitor

Warten/Benachrichtigen: Beide müssen im synchronisierten Block vorhanden sein

Und diese drei Schlüsselwörter zielen auf denselben Monitor ab, was bedeutet, dass nach dem Warten andere Threads in die synchronisierte Blockausführung eintreten können

Taizu Changquan: Basic Thread Class

  1. Thread-Klasse

  2. Ausführbare Klasse

  3. Aufrufbare Klasse

Jiuyin Zhenjing: Fortgeschrittene Multi -Thread-Kontrollklasse

ThreadLocal-Klasse:

(1) Gegenüberliegende Variablen zum Speichern von Threads

(2) Wenn ThreadLocal zum Verwalten von Variablen verwendet wird, wird ThreadLocal von jedem Thread bereitgestellt, der die Variable verwendet eine unabhängige Kopie der Variablen, sodass jeder Thread seine eigene Kopie unabhängig ändern kann, ohne dass dies Auswirkungen auf die entsprechenden Kopien anderer Threads hat.
(3) Wird häufig zur Steuerung der Benutzeranmeldung verwendet, z. B. zum Aufzeichnen von Sitzungsinformationen.

Atomklasse (AtomicInteger/AtomicBoolean)

Sperrklasse: ReentrantLock/ReentrantReadWriteLock.ReadLock/ReentrantReadWriteLock.WriteLock


Das obige ist der detaillierte Inhalt vonZusammenfassung und Analyse des Multithreading-Wissens in Java. 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