使用观察者可观察的模式时,关于线程通知的事情有些困扰我。我的意思是,我可以使用观察者可观察的模式通知主线程该工作线程已完成吗?
假设我们有此界面:
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类中接口实现中发生的所有事情仍然在线程上运行。我在这里正确还是丢失了什么?
答案 0 :(得分:1)
是的,您将处于与工作相同的线程上。
如果您不想在该线程中运行(如果您希望工作完成后让原始线程“恢复”),请改用Thread.join。
是这样的(请原谅飞速Ascii艺术的可怕之处):
mainThread -- start worker thread -- do parallel work -- join -- Continue
\ /
Worker thread started--do parallel work--exit thread
最后(“继续”)将确保工作线程已完全完成。