在使用观察者-可观察模式时,线程通知有一些让我困扰的地方。我的意思是,我可以通知我的主线程工作线程是通过观察者可观察的模式完成的吗?
假设我们有这样的接口:
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类中接口的实现中发生的所有事情仍然在线程上运行。我说的是对的还是漏掉了什么?
发布于 2018-07-31 03:19:50
是的,你将在做这项工作的同一线程上。
如果你不想在那个线程中运行(如果你想让你的原始线程在工作完成后“恢复”),那么可以使用Thread.join。
它是这样的(请原谅飞行中的可怕的ascii艺术):
mainThread -- start worker thread -- do parallel work -- join -- Continue
\ /
Worker thread started--do parallel work--exit thread
在最后("continue"),你将被保证工作线程已经完全完成。
https://stackoverflow.com/questions/51600702
复制相似问题