2013-08-19 6 views
5

Ich bin ein Anfänger zum Threading. Ich weiß nicht genau, was der Unterschied zwischen den drei verschiedenen Arten der Art ist, wie das Thread-Objekt die Schlafmethode genannt hat. Sie können auch bitte in dem klären die Art der Fälle gibt es eine Beschränkung ist es, die Art und Weise über die Verwendung der Einschlaf-Methode wurde unterVerschiedene Methoden zum Aufrufen der Schlafmethode in Threads

Der Code gegeben genannt wird

// implementing thread by extending THREAD class// 

class Logic1 extends Thread 
{ 
    public void run() 
    { 
     for(int i=0;i<10;i++) 
     { 
      Thread s = Thread.currentThread(); 
      System.out.println("Child :"+i); 
      try{ 
       s.sleep(1000);    // these are the three types of way i called sleep method 
       Thread.sleep(1000);   //  
       this.sleep(1000);   // 
      } catch(Exception e){ 

      } 
     } 
    } 
} 

class ThreadDemo1 
{ 
    public static void main(String[] args) 
    { 
     Logic1 l1=new Logic1(); 
     l1.start(); 
    } 
} 
+2

'sleep()' ist eine statische Methode, die immer auf den aktuell ausgeführten Thread verweist. –

+0

Es gibt keine drei Möglichkeiten, die Methode 'sleep' aufzurufen,' thread # sleep' ist 'statisch'. Sie können sie also direkt aus der' Thread'-Klasse oder aus der aktuellen 'Thread'-Objektreferenz aufrufen. –

+0

sind alle gleich. : D – gumuruh

Antwort

7

sleep() ist eine statische Methode, die immer den aktuellen Referenzen Thread wird ausgeführt.

Vom javadoc:

/** 
* Causes the currently executing thread to sleep (temporarily cease 
* execution) for the specified number of milliseconds, subject to 
* the precision and accuracy of system timers and schedulers. The thread 
* does not lose ownership of any monitors. 
* 
* @param millis 
*   the length of time to sleep in milliseconds 
* 
* @throws IllegalArgumentException 
*   if the value of {@code millis} is negative 
* 
* @throws InterruptedException 
*   if any thread has interrupted the current thread. The 
*   <i>interrupted status</i> of the current thread is 
*   cleared when this exception is thrown. 
*/ 
public static native void sleep(long millis) throws InterruptedException; 

Diese Anrufe

s.sleep(1000); // even if s was a reference to another Thread 
Thread.sleep(1000);  
this.sleep(1000);  

sind alle gleichwertig

Thread.sleep(1000); 
+0

Danke, aber wenn ich Runnable Interface statt Erweiterung Thread-Klasse implementieren und direkt verwenden Schlaf (1000); dann wird gesagt, dass die Schlafmethode nicht gefunden wurde, warum ist sie so weit weg? –

+3

Weil die 'Runnable' Schnittstelle keine' sleep (long) 'Methode hat. 'Thread' hat es. –

1

Alle drei gleich sind. Dies ist eine andere Möglichkeit, auf den aktuell ausgeführten Thread zu verweisen.

2

Im Allgemeinen, wenn ClassName.method eine statische Methode des Klassennamen ist, und x ist ein Ausdruck, dessen Typs ClassName, dann können Sie x.method() verwenden und es wird das gleiche wie der Aufruf von ClassName.method() sein. Es ist egal, was der Wert von x ist; Der Wert wird verworfen. Es funktioniert auch, wenn xnull ist.

String s = null; 
String t = s.format ("%08x", someInteger); // works fine 
              // (String.format is a static method) 
Verwandte Themen