Thread -Implementierung
In Java gibt die Run -Methode an, dass die Aufgabe für Threads ausgeführt werden soll.
1. Erben Sie die Thread -Klasse und überschreiben Sie ihre Run -Methode. Erstellen Sie dann ein Objekt dieser Unterklasse und rufen Sie die Start () -Methode auf.
2. Definieren Sie die Klasse, die die Runnable -Schnittstelle implementiert, und implementieren Sie dann die Run -Methode. Das Objekt dieser Klasse wird beim Erstellen von Thread als Parameter übergeben, und dann wird die Start () -Methode aufgerufen.
Die Thread -Klasse ist eine Klasse, die speziell zum Erstellen von Threads und zum Betrieb auf Threads verwendet wird. Wenn eine Klasse die Thread -Klasse erbt, wird die Klasse als Thread -Klasse bezeichnet.
Beide Methoden erfordern die Ausführung der Start () -Methode des Threads, um die erforderlichen Systemressourcen für den Thread zuzuordnen, den Thread auszuführen und die Run () -Methode des Threads auszuführen.
Die Start () -Methode ist die einzige Möglichkeit, den Thread zu starten. Die Start () -Methode erstellt zunächst die Systemressourcen für die Ausführung des Threads und ruft dann die Run () -Methode auf. Ein Thread kann erst einmal gestartet werden, und es ist illegal, von vorne zu beginnen.
Die Arbeit des Threads wird in die Run () -Methode eingebracht, dh all die Dinge, die wir von diesem Thread tun sollen. Standardmäßig tut die Run () -Methode nichts.
In bestimmten Anwendungen hängt die Methode zum Konstrukt von Threads von der Situation ab. Wenn ein Thread eine andere Klasse geerbt hat, sollte er im Allgemeinen in der zweiten Art und Weise konstruiert werden, um die Runnable -Schnittstelle zu implementieren.
Hier sind zwei Beispiele, um zwei Implementierungsmethoden von Threads zu veranschaulichen.
public class threadTest1 {public void main (String [] args) {Thread1 Thread1 = New Thread1 (); {@Override public void run () {für (int i = 0; i <100; ++ i) {System.out.println ("Hallo Welt:" +i); public void run () {für (int i = 0; i <100; ++ i) {System.out.println ("Willkommen:" +i); ] args) {// eine weitere Implementierung von Threads kann auch den anonymen Klassen -Thread = neuer Thread (neuer MyThread1 ()) verwenden .Start (); }}} Klasse myThead2 implementiert runnable {@Override public void run () {für (int i = 0; i <100; ++ i) {System.out.println ("Willkommen:" +i);
Thread -Klasse -Analyse
Die Thread -Klasse implementiert auch die Runnable -Schnittstelle, so dass sie die Run () -Methode in der Schnittstelle implementiert.
Wenn ein Thread-Objekt generiert wird und kein Name dafür angegeben ist Variablen.
Bei Verwendung der ersten Methode (die Art des Erbens von Threads) zum Generieren von Thread -Objekten müssen wir die Methode run () überschreiben, da die Run () -Methode der Thread -Klasse zu diesem Zeitpunkt nichts tut.
Wenn Sie die zweite Methode verwenden (die Möglichkeit zum Implementieren der Runnable -Schnittstelle), um Thread -Objekte zu generieren hat zu diesem Zeitpunkt Runnable implementiert, die Run () -Methode des Thread -Objekts ruft die Run () -Methode von MyrunnableClass auf.
Faden stoppen
Der Niedergang eines Threads kann nicht erfolgen, indem der Befehl stop () aufgerufen wird, sondern die Run () -Methode auf natürliche Weise enden lässt. Die Stop () -Methode ist unsicher und wurde aufgegeben.
Empfohlene Möglichkeit, Threads zu stoppen: Setzen Sie eine Flag -Variable, die in der Run () -Methode eine Schleife darstellt.
Wie im Codebeispiel gezeigt:
public controltheTest {MyThreadClass r = new MyTheadClass (); MyTheadClass implementiert Runnable {private boolean Flag = true;
Fadenlebenszyklus und Prioritätslebenszyklus
Fadenlebenszyklus: Der Prozess von der Schöpfung bis zum Tod eines Threads.
Die folgende Abbildung zeigt die verschiedenen Zustände im Fadenlebenszyklus:
Der Lebenszyklus eines Fadens kann in vier Zustände unterteilt werden:
1. Status erstellen:
Wenn mit dem neuen Bediener ein neues Thread -Objekt erstellt wird, befindet sich der Thread im erstellten Status.
Ein Thread im erstellten Status ist nur ein leeres Thread -Objekt, und das System verteilt ihm keine Ressourcen.
2. Runbarer Status:
Die Start () -Methode des Ausführungs -Threads bereitstellt dem Thread die erforderlichen Systemressourcen, ordnet seinen Betrieb an und ruft die Thread -Karosserie - run () auf, so dass sich der Thread in einem Runnable -Zustand befindet (Runnable).
Dieser Zustand ist kein laufender Zustand, da der Thread möglicherweise nicht tatsächlich ausgeführt wird.
3. Nicht laufender Zustand:
Wenn die folgenden Ereignisse auftreten, wird der Thread im Laufstatus in den unüberlegten Zustand übertragen:
Die Sleep () -Methode wurde genannt;
Der Thread ruft die Wait () -Methode auf, um zu warten, bis die spezifischen Bedingungen erfüllt sind.
Gewindeeingang/Ausgangssperrung.
Kehren Sie zum Runnable -Zustand zurück:
Der Faden im Schlafzustand ist nach der angegebenen Zeit vergangen;
Wenn der Thread auf eine bestimmte Bedingung wartet, muss ein anderes Objekt die Änderung der Wartefadenbedingung durch die Methode benachrichtigen () oder notifyAll () benachrichtigen.
Wenn der Faden aufgrund von Eingang und Ausgabe blockiert ist, warten Sie, bis die Eingabe und die Ausgabe ausgeführt werden.
4. Todeszustand:
Wenn die Run () -Methode des Threads ausgeführt wird, stirbt der Thread natürlich.
Priorität der Faden
1. Priorität und Einstellungen von Threads
Die Priorität von Threads besteht darin, die Planung von Threads durch das System in einer Umgebung mit mehreren Threaden zu erleichtern, und Threads mit hoher Priorität werden zuerst ausgeführt.
Die Prioritätseinstellung eines Threads folgt den folgenden Prinzipien:
Wenn ein Thread erstellt wird, erbt das Kind die Priorität des Elternteils.
Nachdem der Thread erstellt wurde, kann die Priorität geändert werden, indem die Methode SetPriority () aufgerufen wird.
Die Priorität des Threads ist eine positive Ganzzahl zwischen 1-10.
1- min_priorität
10-max_priority
5-Norm_Priority
Wenn nichts festgelegt ist, beträgt der Standardwert 5.
Die Priorität des Threads kann jedoch nicht durch die Ausführungsreihenfolge des Threads bestimmt werden.
2. Thread -Planungsstrategie
Der Thread Scheduler wählt den Thread mit der höchsten Priorität aus. Wenn jedoch Folgendes auftritt, wird der Thread beendet:
Die Ausbeute () -Methode wird im Gewindekörper aufgerufen, wodurch die CPU -Besetzung aufgibt.
Die Sleep () -Methode wird im Fadenkörper aufgerufen, damit der Faden einschläft.
Die Themen werden aufgrund von E/A -Operationen blockiert.
Ein weiterer Thread mit höherer Priorität erscheint.
In einem System, das Zeitscheiben unterstützt, verlaufen die Zeitscheiben des Fadens.