gpt4 book ai didi

java - 如何通知一个线程,另一个线程已经完成了它的执行?

转载 作者:行者123 更新时间:2023-11-30 10:12:56 27 4
gpt4 key购买 nike

在使用观察者可观察模式时,线程通知有一些让我有些困扰的地方。我的意思是,我可以使用观察者可观察模式通知我的主线程工作线程已完成吗?

假设我们有这个接口(interface):

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 block 调用 listener.onThreadFinished(result); 时,我仍在 run() 方法中,这意味着工作线程尚未完成,所以在 MyMain 类的接口(interface)实现中发生的一切仍然在线程上运行。我在这里是正确的还是遗漏了什么?

最佳答案

是的,您将在完成工作的同一个线程上。

如果您不想在该线程中运行(如果您希望您的原始线程在工作完成后“恢复”),请改用 Thread.join。

是这样的(请原谅飞速的 ascii 艺术太可怕了):

mainThread -- start worker thread -- do parallel work -- join -- Continue
\ /
Worker thread started--do parallel work--exit thread

在最后(“continue”),您将保证工作线程已完全完成。

关于java - 如何通知一个线程,另一个线程已经完成了它的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51600702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com