【发布时间】:2018-07-30 19:07:18
【问题描述】:
在使用观察者可观察模式时,线程通知有一些让我有些困扰的地方。我的意思是,我可以通知我的主线程工作线程是通过使用观察者可观察模式完成的吗?
假设我们有这个接口:
interface MyInterface{
void onThreadFinished(Object result);
}
假设我们有以下实现 Runnable 的类:
class Task implements Runnable{
MyInterface listener;
Task(MyInterface listener){
this.listener = listener;
}
public void run(){
Object result = new Object();
try{
//do some work on result here
}
finally{
listener.onThreadFinished(result);
}
}
}
现在退出主线程:
class MyMain implements MyInterface{
public void onThreadFinished(Object result){
//Do something with the result
}
public static void main(String args[]){
Task myTask = new Task(this);
Thread thread = new Thread(myTask);
thread.start();
}
}
现在,我的问题是,当我从 finally 块调用 listener.onThreadFinished(result); 时,我仍在 run() 方法中,这意味着工作线程尚未完成,所以在 MyMain 类的接口实现中发生的一切仍然在线程上运行。我在这里是正确的还是遗漏了什么?
【问题讨论】:
-
是的,调用是在执行
Taskrunnable 的线程上执行的。您是否要从Task交出一些工作以在主线程上执行? -
抱歉,您是如何使
new Task(this))中的static main编译的?也许,你的意思是new Task(new MyMain()) -
@JanusVarmarken 不,我想通知父线程子线程已完成。我知道我可以在父线程中使用 Thread.join() ,我只是认为还可以有另一种通知方式。
-
@AndrewTobilko 我并没有真正编译它,我在问题编辑器中编写了示例代码。
-
@Keselme,那么你是一个准确的作家,但下一次,请确保它编译
标签: java multithreading