Guava——扩展原生JDK线程

1.使用JDK原生的线程池

当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable());

这样可以不影响其他的业务的执行,异步的执行我们想要的任务;

以下面是一个简单的接口为例:

/**
 * JDK 线程测试
 */
@RestController
public class JdkThreadController {

    @RequestMapping("/test/jdk")
    public void execute() throws ExecutionException, InterruptedException {
        // 固定大小的线程池 核心线程数和最大线程数=10
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        // 记录开始时间
        Long start = System.currentTimeMillis();
        // 一个耗时的任务
        Future<Boolean> future = executorService.submit(new Callable<Boolean>() {
            /**
             * Computes a result, or throws an exception if unable to do so.
             *
             * @return computed result
             * @throws Exception if unable to compute a result
             */
            @Override
            public Boolean call() throws Exception {
                //模拟耗时5s
                Thread.sleep(5000);
                return true;
            }
        });

        // 阻塞 等待执行结果
        Boolean result = future.get();
        //打印结果
        System.out.println("任务执行成功了,执行结果=" + result);
        // 记录结束时间
        Long end = System.currentTimeMillis();
        // 执行时间
        System.out.println("线程执行结束了,耗时=" + (end - start) + "毫秒");
        System.out.println("-----------------------华丽的分割线-----------------------");
    }
}

但是当有多个任务提交到线程池去执行的情况下,会有多个Future调用get()获取执行结果的时候,会造成多个future()的get串行的场景。

如果多个get(),每个get()阻塞很久,接口性能也就会受到影响。

2.guava对原生JDK线程的扩展

Guava为Java并行编程Future提供了很多有用扩展,其主要接口为ListenableFuture,并借助于Futures静态扩展。

继承自Future的ListenableFuture,允许我们添加回调函数在线程运算完成时返回值或者方法执行完成立即返回。

如果Future带有回调,这样是不是可以避免我们自己直接操作get()获取返回值,直接帮我们执行一些后续的工作?

依赖的Guava包:

<dependency>
  <groupId>com.google.guava</groupId
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值