Java中的线程和观察者模式
假设我有两个类,Main类和Worker类Java中的线程和观察者模式,java,multithreading,observer-pattern,Java,Multithreading,Observer Pattern,假设我有两个类,Main类和Worker类 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;
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()?主线程还是辅助线程?感谢您运行辅助线程的同一线程。函数调用是在调用它的线程的控制下执行的。在您的情况下,由于您是从工作线程调用notifyMe(),因此工作线程将负责执行方法notifyMe()
您可以使用
Thread.currentThread().getName()
打印线程的名称来测试这一点。请参阅getter/setter以获取位于的线程名称 。。。除非这个家伙从来没有启动过线程,只是调用了run()
@Bear,你能给我们看一下你用来启动线程的代码吗?@MarkoTopolnik,它仍然是运行Worker
的线程。我正在猜测为什么会这样问。如果Worker没有启动,那么可以说没有人在运行Worker(这取决于您所说的“运行Worker”的确切含义)。@MarkoTopolnik,是的,可能是,尽管OP中没有提到没有调用notifyMe
。。。但是,当然,不完整或模糊的问题可能会出现,因此(少数,偶尔:-P)@Bear新线程在您调用start
之前不会启动。类Thread
本身只是一个句柄,而不是“Thread”。就像文件
——如果您有一个文件
对象,这并不意味着该文件实际上存在。当您调用Thread.start
时,一个新线程启动并开始执行run
方法——它与该线程的main
方法类似。还要注意的是,start
方法调用run
——没有人调用run
,就像没有人调用main
一样。这是起点。可能是重复的