[英]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;
}
}
我懷疑您的代碼無法編譯,但是無論如何-我會回答。
這不僅涉及Android,還涉及純Java。
使用“ join”可確保您的代碼將等待線程結束。
這不是您想要的嗎?
此外,請勿將線程的引用設置為null。
您無法保證確切的線程結束時間,因此在線程對象結束之前將線程對象設置為null是不好的做法。
這是一個集合點函數,這意味着您正在引用的線程(例如,GraphicsViewThread)將在那時連接父/主/ UI線程(先到達那里)。 那就是實際繪制UI的線程。 您不能僅將引用設置為null,因為它只是一個引用。 該任務仍將在后台運行。
就我使用Android並對其進行分析而言,我了解到只是為了避免使用Threads。 使用AsyncTask或其他類似的容器。 它更易於管理。
編輯:我剛剛注意到,正如其他人提到的那樣,您的代碼不正確,可能無法正常工作。
您在代碼中有幾處錯誤,並對Thread.join
的用途感到困惑。 必須在Thread
的實例上調用join
方法。 因此,您需要在g
和b
上調用join。 在調用加入之前,通常必須以希望它們停止的某種方式通知那些線程。 就像zaske提到的那樣, join
將等待該線程完成,然后在線程中繼續執行並調用pauseGame
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.