2016-05-12 8 views
1

wir wussten, dass wir einen neuen Thread erstellen können, indem Sie eine neue Klasse erstellen, die Thread erweitert und dann eine Instanz dieses Threads erstellen .. während ich durch dieses Thema sah ich ein Beispiel in mein Buch, das wie folgt ist.Verwirrung beim Erstellen eines Threads durch Erweitern von Thread-Klasse

class NewThread extends Thread{ 
    NewThread(){ 
     super("demo thread"); 
     System.out.println("child thread:"+this); 
     start(); 
    } 
    public void run(){ 
     try{ 
      for(int i=5;i>0;i--){ 
       System.out.println("child thread"+i); 
       Thread.sleep(500); 
      } 
     } catch(InterruptedException e){ 
      System.out.println("child interrupted"); 
     } 
     System.out.println("exiting child thread"); 
     } 
    } 

in diesem Beispiel ich in der Lage bin, all diese Dinge außer den Konstruktor Teil zu verstehen, in der wir jede Instanz nicht verwenden (Thread) beginnen() aufzurufen. So ist meine Frage, wie die start() -Methode ist ohne Thread aufgerufen.

+0

Wenn Sie verstehen nicht, warum die 'start()' Aufruf Wenn Sie in Ihrem Konstruktor keine explizite Objektreferenz benötigen, können Sie Ihre Zeit wahrscheinlich besser nutzen, indem Sie mehr über die Java-Sprache lernen bevor Sie versuchen, Java-Threads zu verstehen. –

Antwort

0

Es ist gültig, da die Methode start() von Thread Klasse geerbt wird, so dass Sie es wie jede andere Klassenmethode aufrufen können.

0

Diese start() -Methode wird für die Thread-Instanz aufgerufen, die gerade in diesem Konstruktor erstellt wurde.

1

Sie erben die start() -Methode von der Klasse Thread, die Ihre NewThread-Klasse erweitert. Man kann es also wie jede andere Methode bezeichnen.

Das gleiche gilt für die Methode run(), die die Annotation @Override verwenden könnte, um das Konzept der Vererbung klarer zu machen.

@Override 
public void run() { 
     try{ 
      for(int i = 5; i > 0; i--) { 
       System.out.println("child thread" + i); 
       Thread.sleep(500); 
      } 
     } catch(InterruptedException e) { 
      System.out.println("child interrupted"); 
     } 
     System.out.println("exiting child thread"); 
    } 
0

Below-Code ist verantwortlich für den Aufruf start() Methode auf NewThread Instanz in NewThread Konstruktor, der start() Methode in Thread Klasse aufruft, die run() Methode aufruft.

NewThread(){ 
    super("demo thread"); 
    System.out.println("child thread:"+this); 
    start(); 
} 

Fluss:

NewThread() -> start() -> Thread start() -> native start0() -> run() 

Siehe diese SE Frage für Interna von Thread Klasse start() Methode:

What's the difference between Thread start() and Runnable run()

Verwandte Themen