为什么thread.join常用于在android中停止线程

时间:2012-10-06 16:31:27

标签: java android

查看几个android示例,我看到使用join()方法暂停线程的趋势:

编辑:请假设2个线程已正确定义。编辑了加入()

的调用
public class MainUI extends Activity{
   private GraphicsViewThread g;
   private BackendDataViewThread b;

   void onCreate(){
      g = new GraphicsViewThread();
      g.start();
      b = new BackendDataViewThread();
      b.start();
   }
   .
   .
   .
   void pauseGame(){
      try {
        g.join();
      }catch (InterruptedException e){
         e.printStackTrace();
      }
      try {
        b.join();
      }catch (InterruptedException e){
         e.printStackTrace();
      }
      GraphicsViewThread = null;
      BackendDataViewThread  = null;
   }
}
  1. GraphicsViewThread和BackendDataViewThread连接到哪个线程?
  2. 使用join()需要什么?我不能立即将引用设置为null吗?

3 个答案:

答案 0 :(得分:4)

我怀疑你的代码没有编译,但无论如何 - 我会回答。
这不仅仅是关于Android,而是简单的Java。
使用“join”可确保代码等待线程结束。
这不正是你想要的吗?
另外,不要将thread的引用设置为null。
您不能确切地确定线程何时结束,因此在线程对象结束之前将线程对象设置为null将是不好的做法。

答案 1 :(得分:0)

这是一个集合函数,这意味着您引用的线程(例如GraphicsViewThread)将在该点(首先到达那里)加入父/ main / UI线程。这是实际绘制UI的线程。您不能只将引用设置为null,因为它只是一个引用。任务仍将在后台运作。

就我使用Android而进行分析时,我学会了避免使用Threads。使用,AsyncTask或其他类似的容器。它更容易管理。

编辑: 我刚刚注意到,正如其他人提到的,你的代码不正确,它可能无法正常工作。

答案 2 :(得分:0)

代码中有几个问题,并且对Thread.join的目的感到困惑。必须在join的实例上调用Thread方法。因此,您需要在gb上致电加入。在调用join之前,通常需要以某种方式通知这些线程,您希望它们停止。正如zaske所提到的,join将等待该线程完成,然后再继续执行调用pauseGame的线程。