2015-02-15 4 views
8

Thread.currentThread() ist eine statische Methode, die einen Verweis auf aktuell ausgeführte Thread (im Grunde eine Referenz auf 'this' Thread) bietet.Wie funktioniert Thread.currentThread()?

Der Zugriff auf nicht statische Elemente (insbesondere this) in einer statischen Methode ist in Java nicht möglich, daher ist currentThread() eine native Methode.

Wie funktioniert die Methode currentThread() hinter den Kulissen?

+0

Sie können den OpenJDK-Code betrachten, der diese Methode implementiert. Bei einer Schätzung würde ich sagen, es fragt das Betriebssystem, auf dem es sich befindet, und ordnet dann diese Thread-ID einem Thread-Objekt zu. –

+2

Ich weiß nichts über 'currentThread'-Implementierungsdetails, aber Sie können' ThreadLocal' verwenden, wenn Sie dieselbe allgemeine Mechanik in Ihrem eigenen Code verwenden möchten. – duckstep

+0

Sehr gute Frage. Insbesondere ist das von _currentThread() _ zurückgegebene Objekt immer dasselbe wie das zum Starten des ** -Threads ** verwendete 'Thread'-Objekt? Kann es zwei 'Thread'-Objekte für den gleichen ** Thread ** erstellen? Kann eine native Funktion einen ** Thread ** erstellen und Java-Code aufrufen? Welches 'Thread'-Objekt wird für diesen ** Thread ** zurückgegeben? – 18446744073709551615

Antwort

5
(basically a reference to 'this' thread) 

Falsch. Es gibt keine this Referenzen hier beteiligt.

Du Vertauschen einen Faden als native Ressource, dh die Thread der Ausführung; und Thread, das ist eine Java-Klasse. Thread-Code läuft nicht "innerhalb" der Thread Instanz, diese Instanz ist nur Ihr Handle in Javas Thread-Steuerelement. Ähnlich wie eine File Instanz ist keine Datei.

So, Thread.currentThread() ist eine Möglichkeit für Sie, die Instanz von Thread für den Thread-of-Ausführung, innerhalb der die Methode aufgerufen wird abrufen. Wie genau Java das ist, ist ein Implementierungsdetail, das Sie nicht interessieren sollte, es sei denn, Sie untersuchen die Details einer bestimmten JVM-Implementierung.

+0

Es ist keine perfekte Analogie, da eine Dateiinstanz einen Pfad darstellt, der während seiner Lebensdauer zu mehreren tatsächlichen Dateien auf Betriebssystemebene aufgelöst werden kann, während eine Thread-Instanz während ihrer Lebensdauer nur einen einzelnen Thread darstellt. Aber die Idee von Thread-Instanzen als Handles ist Sound. –

+0

@ JeffreyBosboom Der Unterschied zwischen dem Lebenszyklus von 'Thread' und dem zugrunde liegenden Thread macht diese Analogie jedoch stärker. 'Thread' kann (und tut) ohne den zugrundeliegenden Ausführungs-Thread existieren - und könnte tatsächlich verschiedene OS-Level-Threads zu verschiedenen Zeiten darstellen (was tatsächlich außerhalb der Reichweite der Spezifikation liegt). –

+0

@Marko Sagen wir, ich erforsche die Details hier, könntest du mir helfen, die Quelle der currentThread() Methode zu finden? Ich würde wirklich gerne sehen, was genau in dieser Methode vor sich geht. – maximus335

Verwandte Themen