Wenn ich den folgenden Code in NetBeans einfüge, gibt NetBeans eine Warnung mit dem Hinweis "Zugriff auf den Schlafmodus der statischen Methode" aus.
%Vor%Mache ich etwas falsch? Soll ich das anders nennen? Ich mache nichts Multithread. Ich habe nur eine einfache Hauptmethode, die ich für eine Weile schlafen möchte.
Thread.currentThread () gibt eine Instanz der Thread-Klasse zurück. Wenn Sie eine statische Methode aufrufen, möchten Sie nur an der Klasse selbst arbeiten. Wenn Sie eine statische Methode für den aktuellen Thread aufrufen, erhalten Sie eine Warnung, dass Sie die Methode für eine Instanz aufrufen.
Sie würden einfach Thread.sleep(2000);
aufrufen. Das wäre äquivalent zu Thread.currentThread.sleep(2000);
Dies ist wichtig zu wissen, weil Leute verbrannt wurden, die etwas wie:
machen %Vor%Edit: Also, wie schlafen wir? Sie schlafen a, indem Sie den Schlafaufruf innerhalb des runnable schreiben, der an den Konstruktor übergeben wird, wie:
%Vor%Wenn 'a' gestartet wird, ist Thread.currentThread in der Run-Methode von someRunnable die Thread-Instanz 'a'.
sleep
ist statisch, daher greifen Sie mit Thread.sleep(2000);
darauf zu. Es wirkt sich auf den aktuellen Thread aus.
Aus dem Javadoc:
Bewirkt den aktuell ausgeführten Thread schlafen (die Ausführung vorübergehend einstellen) für die angegebene Anzahl von Millisekunden. Der Thread verliert nicht Besitz von Monitoren.
Was das bedeutet ist, dass Sie nicht einen anderen Thread schlafen können, nur den, in dem sich der Code befindet.
Es gibt keine Methode für Thread-Instanzen, die "sleep (long)" entspricht.
Thread.currentThread () .Sleep (2000); kompiliert jedoch, weil es eine Methode für die Thread-Klasse gibt, die sleep () mit einem langen Argument genannt wird.
Java erlaubt dies als einen Compiler-Zeittrick, so dass neue Programmierer dies ausführen können, wenn sie über den statischen Zugriff von Methoden verwirrt sind.
Was jedoch im Compiler tatsächlich gelöst ist, ist:
Thread.sleep (2000);
Der folgende Code ist ebenfalls äquivalent:
Thread t = neuer Thread (new Runnable () {public void run () {// tue nichts}}); t.Schlaf (2000);
Wie ein Poster (John V) gezeigt hat, lässt dies die tatsächliche Thread (t) -Instanz nicht schlafen - der aktuelle Thread, der das Thread-Objekt erstellt hat, wird in den Ruhezustand versetzt.
Die Warnung existiert so, dass Sie sich erinnern, dass Sie auf eine statische Methode einer Klasse und nicht auf eine Methode einer Instanzvariablen zugreifen.
Der richtige Code zum Schreiben ist immer Thread.sleep (2000); - greifen Sie niemals auf statische Methoden über eine Instanz zu, um Verwirrung und diese Warnung zu vermeiden.
netbeans gibt Ihnen eine Warnung, weil Sie von Threadreferenz nicht auf Thread-Klasse zugreifen. probiere das
aus %Vor%sleep-Methode Veranlasst, dass der aktuell ausgeführte Thread in den Ruhezustand versetzt wird. So müssen Sie Thread.currentThread () nicht aufrufen.
Immer wenn Sie versuchen, auf die statische Methode mit dem Objekt zuzugreifen, ist es nicht die beste Übung, NB gibt zu dieser Zeit eine Warnung, hier ist der gleiche Fall
Thread.currentThread () wird Ihnen ein Objekt von Thread
zurückgebenTags und Links java netbeans compiler-warnings sleep