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

mvn仓库


<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。

上一篇下一篇

猜你喜欢

热点阅读