Multithreading hat drei Hauptmerkmale, nämlich:
Atomizität, Sichtbarkeit, Ordnung
1 Was ist ein Atom?
bedeutet, dass ein Vorgang oder mehrere Vorgänge entweder vollständig ausgeführt werden und der Ausführungsprozess nicht durch irgendwelche Faktoren unterbrochen wird, oder dass sie überhaupt nicht ausgeführt werden.
Ein sehr klassisches Beispiel ist das Problem der Bankkontoübertragung:
Zum Beispiel muss die Übertragung von 1.000 Yuan von Konto A auf Konto B zwei Vorgänge umfassen: 1.000 Yuan von Konto A abziehen und dann überweisen 1.000 Yuan auf Konto B. Konto B fügt 1.000 Yuan hinzu. Diese beiden Vorgänge müssen atomar sein, um sicherzustellen, dass keine unerwarteten Probleme auftreten.
Das Gleiche gilt, wenn wir Daten verarbeiten, z. B. i = i+1; dazu gehört das Lesen des Werts von i, das Berechnen von i und das Schreiben von i. Diese Codezeile ist in Java nicht atomar, sodass Multithread-Operationen definitiv Probleme verursachen. Daher müssen wir auch Synchronisierung und Sperre verwenden, um diese Funktion sicherzustellen.
(Empfohlenes Video-Tutorial: Java-Video )
2. Was ist Sichtbarkeit
Wenn mehrere Threads auf dasselbe Wann zugreifen Wenn eine Variable geändert wird und ein Thread den Wert der Variablen ändert, können andere Threads den geänderten Wert sofort sehen.
Wenn sich die beiden Threads auf unterschiedlichen CPUs befinden, dann hat Thread 1 den Wert von i geändert und er wurde nicht im Hauptspeicher aktualisiert, und Thread 2 verwendet i erneut, dann muss der i-Wert immer noch der sein Das gleiche wie zuvor. Thread 1 hat ein Variablenpaar. Die Änderung, die Thread 2 nicht gesehen hat, war ein Sichtbarkeitsproblem.
3. Was ist Ordnung?
Die Reihenfolge der Programmausführung erfolgt in der Reihenfolge des Codes.
Um die Effizienz des Programmbetriebs zu verbessern, kann der Prozessor im Allgemeinen den Eingabecode optimieren. Es kann jedoch nicht garantiert werden, dass die Ausführungsreihenfolge jeder Anweisung im Programm mit der Reihenfolge im Code übereinstimmt. Es stellt jedoch sicher, dass das Programm letztendlich ausgeführt wird. Das Ergebnis stimmt mit dem Ergebnis der sequentiellen Ausführung des Codes überein. Wie folgt:
int a = 10; //语句1 int r = 2; //语句2 a = a + 3; //语句3 r = a*a; //语句4
Aufgrund der Neuordnung kann er auch die Reihenfolge 2-1-3-4, 1-3-2-4 ausführen, aber es ist absolut unmöglich, 2-1-4-3, weil diese Abhängigkeiten kaputt sind.
Natürlich verursacht eine Neuordnung kein Problem für den Single-Thread-Betrieb, aber nicht unbedingt für den Multi-Threading. Daher müssen wir dieses Problem bei der Programmierung mit Multi-Threading berücksichtigen.
Empfohlenes Tutorial: Erste Schritte mit Java
Das obige ist der detaillierte Inhalt vonWas sind die drei Hauptmerkmale von Multithreading?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!