Ich habe kurz die Verwendung von Java Multi-Threading eingeführt. Ich habe die Thread -Klasse und die Runnable -Klasse bereits vorgestellt. Um Multi-threading besser zu verstehen, führt dieser Artikel eine detaillierte Analyse des Threads durch.
Start()
Schauen wir uns zunächst die Einführung dieser Methode in der API an:
Lässt den Thread ausführen; Die Java Virtual Machine ruft die Auslaufmethode des Threads auf.
Das Ergebnis ist, dass zwei Threads gleichzeitig laufen; Der aktuelle Thread (vom Aufruf zur Startmethode zurückgegeben) und der andere Thread (Ausführung seiner Auslaufmethode).
Es ist illegal, mehrmals einen Thread zu starten. Besonders wenn der Thread ausgeführt wurde, kann er nicht neu gestartet werden.
Verwenden Sie die Startmethode, um den Thread zu starten, der Multi-Threading wirklich realisiert. Zu diesem Zeitpunkt müssen Sie nicht darauf warten, dass der Körper -Körper -Code ausführen, um die Ausführung abzuschließen und den folgenden Code direkt auszuführen. Ein Thread wird mit dem Aufrufen der Start () -Methode der Thread -Klasse gestartet. Zu diesem Zeitpunkt befindet sich der Thread in einem fertigen (ablaufbaren) Zustand und läuft nicht. Sobald die CPU -Zeitscheibe erhalten wurde, wird die Run () -Methode ausgeführt. Hier wird die Methode run () als Fadenkörper bezeichnet. Es enthält den Inhalt des zu ausgeführten Threads. Die Run -Methode endet und der Faden endet sofort.
Die Startmethode ist eine Methode, um den Thread zu starten. Nach der Verwendung erstellt Java einen neuen Thread, um die Methode im Ausführen auszuführen. Hier ist eine kleine Demo:
für (int i = 0; i <3; i ++) {Thread t = neuer Thread (neuer Runnable () {@Override public void run () {System.out.println (Thread.CurrentThread (). getName ()+"start"); try {thread.sleep (1000); System.out.println (Thread.CurrentThread (). GetName ()+"Ende"); t.start (); } System.out.println ("es ist vorbei"); Ausführungsergebnisse:
es ist vorbei
Thread-1-Start
Thread-0-Start
Thread-2-Start
Thread-0-Ende
Thread-1-Ende
Thread-2-Ende
Da Multithreading zufällig ist, können die Ergebnisse jedes Mal unterschiedlich sein, was auch etwas ist, auf das wir achten müssen. Die Ausführungsreihenfolge und die Aufrufreihenfolge der Threads sind nicht konsistent.
laufen()
Die Auslaufmethode besteht darin, die Auslaufmethode des Runnable -Sets nach Thread aufzurufen und die obige Demo zu ändern:
für (int i = 0; i <3; i ++) {Thread t = neuer Thread (neuer Runnable () {@Override public void run () {System.out.println (Thread.CurrentThread (). getName ()+"start"); try {thread.sleep (1000); System.out.println (Thread.CurrentThread (). GetName ()+"Ende"); t.run (); } System.out.println ("es ist vorbei"); Ausführungsergebnisse:
Hauptstart
Hauptende
Hauptstart
Hauptende
Hauptstart
Hauptende
es ist vorbei
Das direkte Ergebnis der Laufmethode unterscheidet sich sehr vom Start. Es wird in Ordnung ausgeführt und öffnet keinen neuen Thread.
stoppen()
Die Stop -Methode besteht darin, die Ausführung des Threads zu erzwingen. Es ist nicht sicher, verwenden Sie diese Methode also nicht. Wenn Stop aufgerufen wird, werden die gesperrten Ressourcen veröffentlicht, diese Version ist jedoch inkonsistent und kann problemlos Programmprobleme verursachen. Wenn Sie den Stopp des Threads steuern möchten, können Sie benutzerdefinierte Variablen zur Beurteilung verwenden oder is unterruppte () Methode:
Class Thread1 erweitert Thread {@Override public void run () {// Beurteilen Sie, ob der Thread -Körper läuft, während (! isinterrupted ()) {// etwas tun}}} unterbrechen()
Die Funktion von Interrupt besteht darin, den von Ihnen unterbrochenen Thread zu benachrichtigen. Die spezifische Interrupt -Ausführung erfordert jedoch eine benutzerdefinierte Verarbeitung des Threads, und Sie können ihn sogar ignorieren und die Ausführung fortsetzen. Die spezifische Einsamkeit besteht darin, eine InterruptedException bei der Ausführung von Join-, Warten- und Schlafmethoden zu werfen.
Thread t1 = neuer Thread (new Runnable () {@Override public void run () {System.out.println (Thread.CurrentThread (). System.out.println ("Der Thread ist unterbrochen"); // Sie können Ressourcenveröffentlichungen, Protokollierung usw. durchführen, usw. t1.start (); Thread.Sleep (100); t1.interrupt ();Ausführungsergebnisse:
65666768Die Thread ist unterbrochen.
IS unterbrochen ()
Um festzustellen, ob der Thread unterbrochen wird, wird nach der Ausführung der obigen Interrupt -Methode wahr zurückgegeben.
SetPriority (int NewPriority) und GetPriority ()
Stellen Sie die Priorität von Threads fest und erhalten Sie die Priorität von Threads. Die von der CPU zugewiesenen Ressourcen konzentrieren sich auf Threads mit höheren Prioritäten.
Thread t1 = neuer Thread (new Runnable () {@Override public void run () {long t = system.currentTimemillis (); System.out.println (Thread.CurrentThread (). GetName ()+"start") für (int i = 0; i <1000; i ++) {try {try {try {try {{try {{try {try { /thread) {{try {{try {try {try { /thread.sep (1); Todo automatisch generiert block E.printstacktrace (); Thread t2 = neuer Thread (new Runnable () {@Override public void run () {long t = system.currentTimemillis (); System.out.println (Thread.CurrentThread (). GetName ()+"start") für (int i = 0; i <1000; i ++) {try {try {try {try {try {{try {{try {{try {{try {{{try {{try {{{{try {{{{try {{{{{{try {{{{{{try {{try {chrede) (1); Todo automatisch generiert block E.printstacktrace (); T1.SetPriority (10); t2.setPriority (1); t2.Start (); t1.start ();Ausführungsergebnisse:
Thread-0-Startthread-1-Startthread-0 T1 End 1357Thread-1 T2 End 1371
Wenn die Priorität gleich ist, werden T1 und T2 fast gleichzeitig abgeschlossen, und es gibt offensichtliche Unterschiede, wenn die Priorität unterschiedlich ist.
GetName ()
Es ist relativ einfach, holen Sie sich den Namen des Threads.
Join () und schließen Sie sich an (Long Millis)
Die Funktion der Jion -Methode besteht darin, bis die Ausführung der Thread -Ausführung zu warten, und Join (Long Millis) kann die maximale Wartezeit festlegen. Zum Beispiel muss der Haupt -Thread warten, bis der untergeordnete Thread das Ergebnis des untergeordneten Threads vervollständigt und erhalten kann, bevor er weiter ausgeführt wird. Zu diesem Zeitpunkt können Sie die Join -Methode verwenden.
Thread t1 = neuer Thread (new Runnable () {@Override public void run () {long t = System.currentTimemillis (); System.out.println (Thread.CurrentThread (). GetName ()+"start"); try {thread.sleep (1000); E.PrintStackTrace (); t1.start (); t1.join (); System.out.println ("Warten auf T1, die vor Ausführung ausgeführt werden");Ausführungsergebnisse:
Thread-0-Startthread-0 T1 End 1001 Warten Sie auf die Ausführung von T1 vor der Ausführung
Zusammenfassen
Das obige ist die detaillierte Erklärung des Implementierungsmethodencode des Java-Multi-Thread-Threads. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen.