簡體   English   中英

為什么thread.join通常用於在android中停止線程

[英]why is thread.join commonly used to stop threads in android

查看幾個android示例,我看到一種趨勢,其中使用join()方法暫停了線程:

編輯:請假定正確定義了2個線程。 編輯了對join()的調用

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嗎?

我懷疑您的代碼無法編譯,但是無論如何-我會回答。
這不僅涉及Android,還涉及純Java。
使用“ join”可確保您的代碼將等待線程結束。
這不是您想要的嗎?
此外,請勿將線程的引用設置為null。
您無法保證確切的線程結束時間,因此在線程對象結束之前將線程對象設置為null是不好的做法。

這是一個集合點函數,這意味着您正在引用的線程(例如,GraphicsViewThread)將在那時連接父/主/ UI線程(先到達那里)。 那就是實際繪制UI的線程。 您不能僅將引用設置為null,因為它只是一個引用。 該任務仍將在后台運行。

就我使用Android並對其進行分析而言,我了解到只是為了避免使用Threads。 使用AsyncTask或其他類似的容器。 它更易於管理。

編輯:我剛剛注意到,正如其他人提到的那樣,您的代碼不正確,可能無法正常工作。

您在代碼中有幾處錯誤,並對Thread.join的用途感到困惑。 必須在Thread的實例上調用join方法。 因此,您需要在gb上調用join。 在調用加入之前,通常必須以希望它們停止的某種方式通知那些線程。 就像zaske提到的那樣, join將等待該線程完成,然后在線程中繼續執行並調用pauseGame

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM