首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通知一个线程,另一个线程已经执行完毕?

如何通知一个线程,另一个线程已经执行完毕?
EN

Stack Overflow用户
提问于 2018-07-31 03:07:18
回答 1查看 514关注 0票数 2

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

假设我们有这样的接口:

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类中接口的实现中发生的所有事情仍然在线程上运行。我说的是对的还是漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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"),你将被保证工作线程已经完全完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51600702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档