Grüße, willkommen zurück. Scott Stanlick hier. In diesen Lektionen werfen wir einen Blick auf das Threading. Wir schauen uns den Java-Hauptthread an. Wir werden einen Höhepunkt bei verschiedenen Thread-Lebenszyklen haben. Wir werden einen Blick auf Thread-Ausführungspools werfen und Thread-Scheduler. In dieser speziellen Lektion Wir beginnen damit, einen Blick auf die eigentlichen Threads zu werfen. Dies ist normalerweise, wo Sie anfangen würden in einer Diskussion über Threads. Das erste, was ich Ihnen zeigen möchte, ist meine Maschine dass ich weiter laufe. Ich habe vier Prozessoren, also ist dies eine Maschine mit vier Kernen. Wir können sehen, dass ich 236 Prozesse oder Apps habe oder Prozess-IDs, die in 2.906 Threads ausgeführt werden. Es gibt also viele, viele Fäden auf der Maschine, viel mehr Threads als Prozesse vorhanden sind und sicherlich mehr Threads als Prozessoren vorhanden sind. Und so durchlaufen diese Threads Zustandsänderungen. Sie sind lauffähig, sie warten, Sie blockieren, sie haben eine Zeitüberschreitung, sie schlafen. Wir werden sehen, wir werden sehen, wie sich das alles entwickelt Hier in nur einer Minute. Also zuerst einmal, was ist ein Thread? Nun, ein Thread ist ein leichtgewichtiger Prozess die vom Betriebssystem unabhängig ausgeführt werden können. Tatsächlich kann es viele Threads geben alle laufen gleichzeitig. Es ist ein bisschen wie eine mehrspurige Autobahn gegenüber einer einspurigen Straße. So können wir mehrere Threads gleichzeitig oder parallel ausführen. Daher wird viel mehr Arbeit erledigt in der gleichen Zeit. Das erste, was ich Ihnen hier zeigen möchte, ist Wir haben eine Klasse namens Datei-Upload-Thread erstellt. Also sicher genug, es ist ein Thread, das heißt, es hat eine run-Methode. Also, was dieser Thread tun wird, wird bestimmt werden nach dem, was in der run-Methode codiert ist. Wegen der Lebensdauer des Fadens ist die Zeit, die zum Ausführen der run-Methode benötigt wird. Da ist also unser Thread. Es wird einen Dateiupload simulieren. Der erste Test sagt also, dass das Einfädeln falsch gemacht wurde und mal sehen wie das aussieht. Wenn ich das ausführe, es sollte rausgehen und herausfinden Wie viele Prozessoren habe ich, was wir gerade gesehen haben, ich habe vier Prozessoren. Wir überlasten hier also nicht die Hardware, wir erstellen keine Threads mehr als das, was wir Prozessoren in diesem Moment haben. Also rufe ich die run-Methode für den Thread auf, vier von ihnen tatsächlich hier. Und ich kann sehen, dass alle diese Threads liefen auf der Hauptmethode mit einer Priorität von 5. Und dass es 2,2098 Sekunden gedauert hat. Nun, das sieht für mich nicht nach Threading aus. Das sieht so aus, als wären diese Dinge in einer Reihe gestapelt. Und das waren sie. Das lag daran, dass Sie die run-Methode nicht direkt aufrufen. Sie rufen die Thread-Start-Methode auf. Und die Startmethode greift die Maschinerie ein so dass Hintergrundaufgaben erstellt und erzeugt werden. Also machen wir es richtig und lassen Sie uns die start-Methode für den Thread verwenden und mal sehen, wie das gleiche Szenario aussieht. Verfügbare Prozessoren sind noch vier, und so werde ich dieselben vier Dateiladevorgänge sehen, die gleichen vier Datei-Uploads eher, aber jetzt können Sie sehen, dass es 0,547 Sekunden sind. Und ich kann auch sehen, dass sie nicht alle gelaufen sind auf der Hauptmethode. Das war Thread 1, Thread 2, Thread 3, Thread 0. Im Grunde waren sie also jeweils unabhängige Threads, und jetzt können wir sehen, dass wir die gleiche Menge an Arbeit geleistet haben in einem Viertel der Zeit. Der nächste Typ, den wir uns ansehen werden, ist also wie wir Threads benennen können. Das ist zum Beispiel etwas schwierig um herauszufinden, was was ist, richtig? Vor allem, wenn Sie sich Stacktraces ansehen und Thread-Dumps und so etwas. Was ich also tun möchte, ist wieder das gleiche Szenario, aber ich möchte den Namen des Threads festlegen zur Wissensstadtnummer und es wird hier nur das "I" in der Viererschleife verwendet. Also sollten wir die Wissensstadt Nummer 1 sehen, Nummer 2, Nummer 3, Nummer 4. Und wieder fangen wir diese richtig an. Jetzt wird das Betriebssystem willkürlich Führen Sie diese Threads aus. Und das liegt daran, dass wir keine Thread-Priorität festgelegt haben. Sie lassen es also alle mit Priorität 5 laufen. Sie haben also jeweils die gleiche Priorität. Es gibt also nicht unbedingt ein Sprichwort welcher Thread zuerst ausgeführt wird. Und wie Sie hier sehen können, lief die Wissensstadt Nummer 1 zuerst, 0 lief tatsächlich zuletzt. Und wenn wir es noch einmal laufen lassen, würden Sie sehen eine Reihe von Sorten gibt. Es ist unvorhersehbar, die Reihenfolge, in der sie laufen werden. Es sei denn, Sie tun dies natürlich. Wenn Sie die Priorität festlegen, wenn Sie einen bestimmten Thread haben, sagen wir mal es druckt Kundenrechnungen und der Kunde steht da am Tresen, Sie möchten wahrscheinlich den Thread, der den Druck durchführt eine höhere Priorität haben, eine höhere Ausführungspriorität zu geben. Und was wir hier tun, ist die gleiche Idee. Wir werden diesen Datei-Upload viermal ausführen, außer drei von ihnen werden eine Priorität 9 haben. Ich mache hier nur ein bisschen Switcheroo. Wenn "I" 3 ist, setzen wir die Priorität auf 5. Wenn "ich" etwas anderes als 3 ist, Wir werden die Priorität auf 9 setzen. Was wir also sehen sollten, ist Wissensstadt Nummer 3 läuft zuletzt. Denn die anderen drei hatten eine höhere Priorität Also beweisen wir das einfach. Und das tat es. So können wir die Wissensstadt Nummer 2 sehen, Nummer 1, Nummer 0. Sie liefen alle mit Priorität 9 und sie übertrumpften diese Wissensstadt Nummer 3, die mit Priorität 5 lief also wurde es zuletzt serviert. Vielen Dank fürs Zuschauen.