guava实现一个有100次请求网络的线程池代码处理
2023-09-25 本文已影响0人
爱学习的蹭蹭
google的guava实现一个有100次请求网络的线程池代码处理
google的guava实现一个有100次请求网络的线程池代码处理
import com.google.common.util.concurrent.*;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class GuavaExecutorsExample {
public static void main(String[] args) {
// 创建一个 ListeningExecutorService,该 executor 会在调用 submit() 时自动开始执行任务
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(100));
try {
// 提交100个任务并获取 Future 列表
List<ListenableFuture<String>> futures = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Callable<String> task = () -> {
// 这里执行你的网络请求逻辑,返回结果为 String 类型
return "Network Response " + i;
};
futures.add(service.submit(task));
}
// 使用 Guava 的 Futures 工具类等待所有任务完成,并获取所有结果
Futures.allAsList(futures).get(30, TimeUnit.SECONDS); // 设置超时时间
} catch (Exception e) {
e.printStackTrace();
} finally {
// 记得关闭 executor,防止资源泄露
service.shutdown();
}
}
}
maven 导入jar
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.2-jre</version>
</dependency>
Gradle 导入jar
// https://mvnrepository.com/artifact/com.google.guava/guava
implementation group: 'com.google.guava', name: 'guava', version: '32.1.2-jre'
在这个示例中,我创建了一个 ListeningExecutorService,这是一个可以提交 ListenableFuture 任务的 ExecutorService。然后我提交了100个任务,并使用 Futures.allAsList() 来等待所有任务完成并获取结果。最后,记得在所有任务完成后关闭 executor。