2013-06-26 10 views

Antwort

33

Der Code würde nur ausgeführt werden, wenn someXThread ausgeführt wurde, in diesem Fall wäre es sinnlos, someYThread auszugeben. Also, da der einzige Thread wert yield auf dem aktuellen Thread ist, machen sie die Methode static, so dass Sie keine Zeit verschwenden wird versuchen, yield auf some other thread aufrufen.

+6

Sie waren schneller ...;) – Maroun

+14

Andere Gewinde nicht unbedingt nachgegeben werden - wenn es mehr als ein Prozessor (Core) ist, dann können sie aktiv sein. Der wahre Grund ist, dass die Verwendung von Ertrag und Schlaf für andere Threads unvorhersehbar und gefährlich ist und die Privatsphäre anderer Threads verletzt. –

+3

Die Frage ist, warum diese Methode statisch ist? Es geht nicht um den Zugriff auf andere threads.Und ein guter Punkt hier so weit :) –

6

Wenn Sie die Methode yield oder sleep aufrufen, gilt dies für den aktuellen Thread und nicht für einen bestimmten Thread. Sie müssen nicht angeben, welcher Thread gerade ausgeführt wird, um den Prozessor freizugeben.

similar thread in this forum

14

Dies liegt daran, wenn Sie diese Methoden aufrufen, diejenigen angewendet werden, auf dem gleichen Thread, der ausgeführt wird. Sie können keinem anderen Thread mitteilen, dass einige Operationen wie sleep() oder wait ausgeführt werden sollen. Alle Operationen werden an dem Thread ausgeführt, der gerade ausgeführt wird.

+2

Ich denke, warte ist keine statische Methode, Grund ist warten und benachrichtigen Methoden für die Kommunikation zwischen zwei Threads, während Sleep und Static innerhalb des aktuellen Threads verwendet werden. –

+0

Kein 'wait' ist nicht statisch, ich wollte damit sagen, dass, wenn Sie wait method aufrufen, es den aktuellen Thread stoppt, bis' notify' von einem anderen Thread aufgerufen wird. Sie haben Recht bezüglich der Kommunikation zwischen zwei Threads. –

+0

Sie können aber nur 'wait' auf dem aktuellen Thread aufrufen, wenn Sie die aktuelle Thread-Sperre übernommen haben. 'wait' und' sleep' sind ziemlich verschieden. – selig

2

Aus demselben Grund sind die Methoden stop() und suspend() veraltet. Ein Eindringen in den Thread-Zustand von außen ist gefährlich und kann zu unvorhersehbaren Ergebnissen führen. Und wenn zum Beispiel der Schlaf nicht statisch ist, wie denkst du, dass es zu einer Unterbrechung kommen wird?

0

Sowohl Schlaf- als auch Ertragsmethoden sind nativ. Um besser von den obigen Antworten zu verstehen, habe ich zwei Klassen ClassA und ClassB mit derselben statischen Methode gemacht. Ich habe die Methode einer anderen Klasse aufgerufen, um ihr Verhalten zu überprüfen. Wir können also die statische Methode einer anderen Klasse aufrufen.
So kann es andere Gründe dafür geben, Schlafmethode statisch zu machen.

public class ClassA { 

    public static void method(){ 
     System.out.println("Inside ClassA method"); 
    } 

    public static void main(String[] args) { 
     method(); 
     ClassB classb = new ClassB(); 
     classb.method(); 
    } 
} 

    public class ClassB { 
    public static void method(){ 
     System.out.println("Inside ClassB method"); 
    } 

} 
2

Sie sind statisch so dass zwingendes Konzept kann also

vermieden werden, wenn sie mit übergeordneter Klasse Referenz genannt werden Objektkindklasse wie Situation zu halten es implementiert Methode Konzept Ausblenden und nicht aufgrund der statischen Methode Natur zwingender Es wird also die Methode der Elternklasse (hier der Thread-Klasse) ausgeführt, die die volle Funktionalität von Schlaf und Ertrag hat.

http://i.stack.imgur.com/goygW.jpg

Verwandte Themen