【问题标题】:Threading and observer pattern in JavaJava中的线程和观察者模式
【发布时间】:2023-03-30 21:53:01
【问题描述】:

假设我有两个类,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;
    public void run(){
        listener.notifyMe(state);
    }
}

我的问题是: 假设worker在另一个线程中运行,哪个线程会运行函数notifyMe()
主线程还是工作线程?谢谢你

【问题讨论】:

标签: java multithreading observer-pattern


【解决方案1】:

函数调用在调用它的线程的控制下执行。在您的情况下,由于您从工作线程调用 notifyMe(),工作线程将负责执行方法 notifyMe()

您可以使用Thread.currentThread().getName() 来打印线程的名称来测试它。请参阅this link 处的线程名称的 getter/setter。

【讨论】:

    【解决方案2】:

    运行worker的同一线程。

    【讨论】:

    • ... 除非该人从未设法启动线程并且只是调用了run()。 @Bear 你能告诉我们你用来启动线程的代码吗?
    • @MarkoTopolnik,它仍然是正在运行的线程Worker
    • 我试图猜测这个问题的原因。如果 Worker 没有启动,那么可以说没有人在运行 Worker(取决于“运行 Worker”的确切含义)。
    • @MarkoTopolnik,是的,可能是,虽然 OP 中没有提到 notifyMe 没有被调用...但是当然,SO 上可能会出现不完整或模糊的问题(一些,偶尔: -P)
    • @Bear 直到你调用start 新线程才会启动。 Thread 类本身只是一个句柄,它不是“线程”。就像File 一样——如果你有一个File 对象,那并不意味着该文件确实存在。当您调用Thread.start 时,一个新线程启动并开始执行run 方法——就像该线程的main 方法一样。还要注意start 方法调用run 是不正确的——没有人调用run,就像没有人调用main 一样。这是起点。
    猜你喜欢
    • 1970-01-01
    • 2013-03-05
    • 2015-12-31
    • 2012-01-22
    • 2012-02-03
    • 2013-12-02
    • 2012-02-15
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多