如何在Java / Android中等待一个线程完成,然后再启动另一个线程?
2022-09-02 11:43:56
假设我有这个非常简单的代码:
for(int i = 0; i < 10; i++) {
thread = new Thread(this);
thread.start();
}
但是,在此代码中,线程显然一次启动 10 次,并且在前一个线程完成之前不会等待。在让线程再次启动之前,如何检查线程是否已完成?
假设我有这个非常简单的代码:
for(int i = 0; i < 10; i++) {
thread = new Thread(this);
thread.start();
}
但是,在此代码中,线程显然一次启动 10 次,并且在前一个线程完成之前不会等待。在让线程再次启动之前,如何检查线程是否已完成?
在回答你的问题之前,我强烈建议你研究一下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();
如果每个线程都必须等待前一个线程完成才能启动,则最好有一个唯一线程按顺序执行原始 run 方法 10 次:
Runnable r = new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) {
OuterClass.this.run();
}
}
}
new Thread(r).start();