Thread Schlaf und Thread beitreten

8

Wenn ich einen Thread in eine Schleife einlege, gibt Netbeans mir eine Warnung, dass das Aufrufen von Thread.sleep in der Schleife Leistungsprobleme verursachen kann. Wenn ich jedoch den Schlaf durch Join ersetzen würde, gibt es keine solche Vorsicht. Beide Versionen kompilieren und funktionieren gut. Mein Code ist unten (überprüfen Sie die letzten Zeilen für " Thread.sleep() vs t.join() ").

%Vor%

Wie ich es verstehe, wartet join darauf, dass der andere Thread beendet wird, aber in diesem Fall sind nicht beide schlafen und machen das Gleiche? Warum werfen Netbeans dann die Vorsicht?

    
Dhruv Gairola 30.12.2010, 10:45
quelle

3 Antworten

30

Es gibt einen Unterschied zwischen join () und sleep (). join () wartet, bis die Zeit abgelaufen ist oder der Thread beendet ist. sleep () wartet nur auf die angegebene Zeit, wenn sie nicht unterbrochen wird. So ist es durchaus möglich, dass join () viel schneller als die angegebene Zeit zurückgibt.

Der Grund, warum Netbeans dich über Schlaf () und nicht über Join () warnt, ist genau dieser Unterschied. join () wartet auf etwas Bedeutungsvolles, während der Schlaf () einfach da sitzt und nichts tut. Wenn Sie nicht auf etwas warten, warum sollten Sie überhaupt warten wollen? Es ist selten sinnvoll, daher die Warnung.

    
Sergey Tachenov 30.12.2010, 14:24
quelle
5

Dass sie verwendet werden können, um dasselbe zu erreichen, bedeutet nicht, dass sie auf die gleiche Weise missbraucht werden. Leute missbrauchen oft Thread.sleep() , wenn sie wirklich eine Sperre oder etwas verwenden sollten, das blockiert:

%Vor%     
Aaron Digulla 30.12.2010 10:51
quelle
1

Für diesen Fall denke ich, dass Join eine bessere Alternative ist als die Verwendung einer Sperre. Join ist einfach und elegant. Wenn Sie jedoch eine Sperre verwenden, sollten Sie auch die notify-Methode und den synchronisierten Block verwenden, und natürlich benötigen Sie ein Sperrobjekt.

Join Beispiel, Aufruf Thread-Code;

%Vor%

Sperrbeispiel: Aufruf von Thread-Code;

Objektsperre = neues Objekt ();

%Vor%

}

Hier ist Thread t1 Code;

%Vor%     
Gursel Koca 30.12.2010 11:47
quelle

Tags und Links