2012-04-25 9 views
1

と仮定私は二つのクラス、メインクラスとワーカークラスを持っているスレッディングとJavaでのオブザーバーパターン

class Main implements StateChangeListener extends JFrmame{ 

    public void notifyMe(State state){ 
     //Change the GUI according to the state 
    } 
} 


class Worker extends Thread{ 
    public StateChangeListener listener; 
    public void run(){ 
     listener.notifyMe(state); 
    } 
} 

私の質問は次のとおりです。 と仮定労働者が別のスレッドで実行され、(機能notifyMeを実行するスレッド)
メインスレッドまたはワーカースレッド?ありがとうございました

+0

[Javaマルチスレッドの可能な複製:オブジェクトメソッドが実行されるスレッドは、それが作成されたスレッドのスレッドによって異なりますか?](http://stackoverflow.com/questions/10243492/java-multithreadingオブジェクトが実行されたスレッドメソッド –

答えて

2

関数呼び出しは、呼び出したスレッドの制御下で実行されます。あなたのケースでは、ワーカースレッドからnotifyMe()を呼び出すので、ワーカースレッドはメソッドnotifyMe()の実行を担当します。

Thread.currentThread().getName()を使用してこれをテストして、スレッドの名前を印刷することができます。スレッド名はgetter/setterのthis linkを参照してください。

+0

http://stackoverflow.com/a/10243529/720176 – aProgrammer

1

ワーカーを実行している同じスレッド。

+0

...スレッドがスレッドを開始することが決してなく、 'run()'だけを呼び出すことはできませんでした。 @Bearスレッドを開始するために使用するコードを表示できますか? –

+0

@ MarkoTopolnik、それはまだ 'Worker'を実行しているスレッドになります。 –

+0

私はこれがなぜ尋ねられるのかを第二に推測しようとしています。ワーカーが起動していない場合は、おそらく誰もワーカーを実行していない(「ワーカーを実行しています」という意味によります)。 –

関連する問題