2012-04-25 70 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