如何在Java / Android中等待一个线程完成,然后再启动另一个线程?

2022-09-02 11:43:56

假设我有这个非常简单的代码:

for(int i = 0; i < 10; i++) { 
    thread = new Thread(this); 
    thread.start(); 
} 

但是,在此代码中,线程显然一次启动 10 次,并且在前一个线程完成之前不会等待。在让线程再次启动之前,如何检查线程是否已完成?


答案 1

在回答你的问题之前,我强烈建议你研究一下ExecutorServices,例如ThreadPoolExecutor

现在回答您的问题:

如果要等待上一个线程完成,在开始下一个线程之前,可以在以下各项中添加:thread.join()

for(int i = 0; i < 10; i++) { 
    thread = new Thread(this); 
    thread.start(); 

    thread.join();    // Wait for it to finish.
}

如果你想启动10个线程,让它们做它们的工作,然后继续,你在循环之后对它们:join

Thread[] threads = new Thread[10];
for(int i = 0; i < threads.length; i++) { 
    threads[i] = new Thread(this); 
    threads[i].start(); 
}

// Wait for all of the threads to finish.
for (Thread thread : threads)
    thread.join();

答案 2

如果每个线程都必须等待前一个线程完成才能启动,则最好有一个唯一线程按顺序执行原始 run 方法 10 次:

Runnable r = new Runnable() {
    public void run() {
        for (int i = 0; i < 10; i++) {
            OuterClass.this.run();
        }
    }
}
new Thread(r).start();

推荐