Ich versuche also mit Threads für ein Spiel zu arbeiten, das ich mache. Ich bin zu dem Thema sehr sehr , so dass ich nicht richtig verstehe. Meine Frage ist, wie funktioniert die currentThread () Methode in der Thread Klasse der Java API. Die API sagt "Gibt einen Verweis auf das aktuell ausgeführte Thread-Objekt zurück.", Aber soweit ich weiß, werden mehrere Threads gleichzeitig ausgeführt. Wie ist es möglich, nur einen ausführenden Thread zurückzugeben?
Der Code, der currentThread
aufruft, wird in einem der Threads ausgeführt, nicht in allen Threads, so dass er diesen Thread spezifisch erhalten kann.
Angenommen, Sie haben eine Liste von Anweisungen auf einem Blatt Papier gedruckt. Eine Person liest die Anweisungen und führt sie aus. Die Anweisungen sind ein Programm. Die Person ist ein Thread. Sie könnten viele Kopien des Papiers machen und sie an viele Leute weitergeben. Wenn die Anweisungen etwas wie "Schlag selbst" sagen, bezieht sich dich selbst auf denjenigen, der diese Anweisung aus diesem Papier liest. Ebenso verweist Thread.currentThread()
auf den Thread, der diesen Aufruf an currentThread()
ausführt.
Wenn eine Anweisung in Ihrem Code ausgeführt wird, wird sie in einem bestimmten Thread ausgeführt. Dies ist der von dieser Methode zurückgegebene Thread.
Wenn eine bestimmte Methode von mehreren Threads ausgeführt wird, gibt jede Ausführung möglicherweise einen anderen Wert für Thread.currentThread()
zurück.
Sie könnten dieses kurze Beispiel ausprobieren, um eine bessere Vorstellung davon zu bekommen, was vor sich geht und insbesondere, dass die 2 Threads parallel ausgeführt werden. Sie sollten sehen, dass t1 ein paar Schleifen ausführt, dann t2 dasselbe tut und zurück zu t1 usw. (Sie müssen möglicherweise die Anzahl der Schleifen von 5 auf eine höhere Zahl je nach Ihrem Rechner erhöhen):
%Vor%Wenn Sie eine Single-Thread-Anwendung schreiben, können Sie Ihr Programm wie eine Reihe von Anweisungen betrachten, die jeweils nach dem letzten ausgeführt werden (dies ist eine grobe Annäherung, aber konzeptioneller Kompilator und Prozessor versuchen das zu simulieren und so zu arbeiten Das war wirklich, was passierte).
Wenn Sie mehrere Threads verwenden, hat jeder Thread seine eigene Befehlsfolge. Ein neuer Thread wird nach der Erstellung an einen Einstiegspunkt (eine Methode) übergeben und führt die Ausführung aus diesen aus. Jeder Thread ist unabhängig von dem anderen Thread in seiner Ausführung (es wird einfach eine Anweisung nach der anderen ausgeführt), obwohl sie Speicher teilen und somit die Nebeneffekte von einem Thread einen anderen beeinflussen können.
Damit also ein Code ausgeführt werden kann, muss er im Kontext eines Threads ausgeführt werden (er wird vom Betriebssystem beim Start der Anwendung erstellt und mit der Methode Main
gestartet). Wenn die Funktion currentThread
aufgerufen wird, befindet sie sich in einem dieser Kontexte.
Die Java-Laufzeit beim Erstellen eines Threads speichert einen Verweis auf dieses Thread
-Objekt im Thread-Kontext, und das currentThread
sucht dort nur nach und gibt den aktuellen Thread zurück.
Mehrere Threads laufen nicht gleichzeitig und es gibt Thread-Wechsel zwischen mehreren Threads. Der Prozessor kann eine Aufgabe gleichzeitig ausführen, sodass jeweils ein Thread ausgeführt wird. So erhalten wir die Referenz des aktuell laufenden Threads.
Tags und Links java multithreading