在多线程编程中,当executor服务的所有线程都在处理任务时,主线程可以选择等待所有任务完成后再继续执行。这通常通过使用线程同步机制来实现,例如Java中的CountDownLatch
、CyclicBarrier
或ExecutorService
的awaitTermination
方法。
以下是一个使用ExecutorService
和awaitTermination
方法实现主线程等待所有任务完成的示例代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交任务到线程池
for (int i = 0; i < 10; i++) {
final int taskNumber = i;
executor.submit(() -> {
System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName());
try {
TimeUnit.SECONDS.sleep(2); // 模拟任务执行时间
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Task " + taskNumber + " is completed");
});
}
// 关闭线程池并等待所有任务完成
executor.shutdown();
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
System.out.println("Not all tasks were completed within the timeout period.");
} else {
System.out.println("All tasks have been completed.");
}
}
}
在这个示例中,我们创建了一个固定大小的线程池,并提交了10个任务。然后,我们调用shutdown
方法关闭线程池,并使用awaitTermination
方法等待所有任务完成。如果在指定的超时时间内(这里是60秒)所有任务都完成了,程序将输出“All tasks have been completed.”;否则,将输出“Not all tasks were completed within the timeout period.”。
通过这种方式,你可以确保主线程在所有任务完成之前不会退出,从而实现对并发任务的完整控制。
领取专属 10元无门槛券
手把手带您无忧上云