2016-05-12 4 views
1

新しいスレッドを作成してスレッドを拡張し、そのスレッドのインスタンスを作成することで新しいスレッドを作成できることはわかっていました。私の本は以下の通りです。私たちは)(スタートを呼び出すために任意のインスタンス(スレッド)を使用していないされているコンストラクタ一部を除いて、すべてのそれらの事を理解することができています。この例ではスレッドクラスを拡張してスレッドを作成している間に混乱が生じた場合

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"); 
     } 
    } 

。だから私の質問は、start()メソッドがどのようにありますスレッドなしで呼び出されます。

+0

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

Threadクラスstart()メソッドの内部のために、このSEの質問を参照してください。あなたのコンストラクタで明示的なオブジェクト参照が必要ない場合は、おそらくJava言語クラスについてもっと学ぶことによって、あなたの時間をより有効に活用することができますあなたがJavaスレッドを理解しようとする前に、 –

答えて

0

メソッドstart()Threadクラスから継承されているため有効です。他のクラスメソッドと同じように呼び出すことができます。

0

このstart()メソッドは、このコンストラクタで作成されたばかりのスレッドインスタンスで呼び出されます。

1

NewThreadクラスが継承するクラスThreadからstart()メソッドを継承しています。他の方法と同じように呼び出すことができます。

継承の概念を明確にするために、@Overrideアノテーションを使用できるrun()メソッドと同じです。コードの下

@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

run()メソッドを呼び出すThreadクラスのstart()メソッドを呼び出しNewThreadコンストラクタであなたのNewThreadインスタンスでstart()メソッドを呼び出すための責任があります。

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

フロー:なぜ `開始()`の呼び出しあなたが理解していない場合

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

関連する問題