ExecutorService executorService = Executors.newFixedThreadPool(5); Future<Integer> future1 = executorService.submit 执行20个任务,要同步执行
时间: 2024-03-23 07:34:50 浏览: 64
ExecutorService是Java中用于管理线程池的接口,Executors类提供了一些静态方法来创建不同类型的线程池。在这个例子中,通过调用Executors.newFixedThreadPool(5)方法创建了一个固定大小为5的线程池。
接下来,通过executorService.submit方法提交了20个任务。submit方法会返回一个Future对象,可以用来获取任务的执行结果。
要实现同步执行这20个任务,可以使用CountDownLatch来实现。CountDownLatch是一个同步辅助类,它可以让一个或多个线程等待其他线程完成操作后再继续执行。
下面是实现的代码示例:
```java
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main {
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(5);
CountDownLatch latch = new CountDownLatch(20);
for (int i = 0; i < 20; i++) {
final int taskNumber = i;
executorService.submit(() -> {
// 执行任务的代码
System.out.println("Task " + taskNumber + " executed");
latch.countDown();
});
}
latch.await(); // 等待所有任务完成
executorService.shutdown(); // 关闭线程池
}
}
```
在上面的代码中,通过CountDownLatch来等待所有任务完成。每个任务执行完毕后,调用latch.countDown()方法减少计数器的值。在主线程中,调用latch.await()方法来等待计数器变为0,即所有任务完成后再继续执行后续代码。
阅读全文