等到所有线程在java中完成工作

2022-08-31 09:12:03

我正在编写一个具有 5 个线程的应用程序,这些线程同时从 Web 获取一些信息,并在缓冲区类中填充 5 个不同的字段。
我需要验证缓冲区数据,并在所有线程完成其作业时将其存储在数据库中。
我该怎么做(当所有线程都完成其工作时收到警报)?


答案 1

我采用的方法是使用执行器服务来管理线程池。

ExecutorService es = Executors.newCachedThreadPool();
for(int i=0;i<5;i++)
    es.execute(new Runnable() { /*  your task */ });
es.shutdown();
boolean finished = es.awaitTermination(1, TimeUnit.MINUTES);
// all tasks have finished or the time has been reached.

答案 2

您可以加入线程。连接块,直到线程完成。

for (Thread thread : threads) {
    thread.join();
}

请注意,抛出一个 .如果发生这种情况,您必须决定该怎么做(例如,尝试取消其他线程以防止完成不必要的工作)。joinInterruptedException