2012-04-25 100 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 -does-the-thread-on-which-an-objects-method-is-executed-depe) – 2012-04-25 10:35:34

回答

2

函數調用是在調用它的線程的控制下執行的。在你的情況下,因爲你從工作者線程調用notifyMe(),工作線程將負責執行方法notifyMe()

您可以使用Thread.currentThread().getName()來測試它,以打印線程的名稱。請參閱this link的線程名稱的getter/setter。

+0

一個有趣的答案在http://stackoverflow.com/a/10243529/720176 – aProgrammer 2012-04-25 10:47:19

1

正在運行worker的同一個線程。

+0

...除非該人從未設法啓動該線程並且僅僅調用'run()'。 @Bear你能告訴我們你用來啓動線程的代碼嗎? – 2012-04-25 10:35:03

+0

@MarkoTopolnik,它仍然是運行'Worker'的線程。 – 2012-04-25 10:37:07

+0

我試圖猜測爲什麼會出現這個問題。如果工人沒有啓動,那麼可以說沒有人在運行工人(取決於「運行工人」的意思)。 – 2012-04-25 10:39:12