2016-07-04 10 views
0

こんにちは私はこの出力を得ている理由を見つけることができません。最初の出力は理解しましたが、2行目は理解できません。私はスレッディングに新しいですし、私はグーグルではありますが、まだ疑いがあります。誰かが説明できますか?このマルチスレッドプログラムの出力を知ることができません

出力がある:あなたがあなたのThreadExクラスでrun()メソッドをオーバーライドするので、それが起こる

class ThreadEx extends Thread{ 

    ThreadEx(){} 

    ThreadEx(Runnable r) 
    { 
     super(r); 
    } 

    public void run() 
    { 
     System.out.println("Inside ThreadEx"); 
    } 
} 

class RunnableEx implements Runnable{ 

    @Override 
    public void run() { 
     System.out.println("Inside RunnableEx "); 
    } 
} 

public class Test4 { 

    public static void main(String[] args) { 

     new ThreadEx().start(); 
     new ThreadEx(new RunnableEx()).start(); 
    } 
} 

答えて

2

Inside ThreadEx 
Inside ThreadEx 

は、ここに私のコードです。あなたの代わりに

new ThreadEx(new RunnableEx()).start() 

new Thread(new RunnableEx()).start() 

を使用する場合は、あなたがスレッド "実行" メソッドを上書き予想出力(Iが期待される出力がInside ThreadEx Inside RunnableExだと思います)

0

が表示されます。 元の "run"メソッドは、Runnableの "run"メソッド(ここでは "r")を呼び出します。 しかし、それだけであなたの "のSystem.outを。..." と呼んでますので、あなたがそう

public void run() 
{ 
    System.out.println("Inside ThreadEx"); 
} 

のみ秒でそれを置き換えるオリジナルが

@Override 
public void run() { 
    if (target != null) { 
     target.run(); 
    } 
} 

ある

、それを上書きあなたのRunnableが何を言っても、1つは実行されます。

0

Threadクラスは、メソッドが実行されたインターフェイスとThreadクラスを実装しており、そのメソッドのデフォルトの実装を提供します。あなたのコードについて

- >実際に方法だから、mainメソッドの最初の行はThread Class.Itは1つのメソッドの実行を(持っている拡張するクラスThreadExのデフォルトコンストラクタを呼び出している

)でありますあなたが上書きすることができるThread supperclassのですので、私は@Overrideがrunメソッドの上に見つからないと思います。ここまで。述べたように、あなたは上記を行っているプラ​​スあなたはこのthread.Youを開始

new ThreadEX().start(); 

を参照してください

ので、実行を()implemetedているとそれは内部のThreadX」を出力します。 mainメソッドの

SECOND LINE - >

mainメソッドの次の行はRunnableオブジェクトを与えるクラスThreadEXの第二のコンストラクタを呼び出しています。表示されているように、このインターフェイスを実装するクラスであるRunnableEXを提供しています。これはrun()メソッドをオーバーライドします。あなたは

new ThreadEx(new RunnableEx()).start(); 

Threadこの行にスレッドを起動したときだから、

http://docs.oracle.com/javase/tutorial/java/IandI/override.html

をオーバーライドについて 'インサイドRunnableEX'

を印刷します

関連する問題