Future+Callable异步查询

Future+Callable异步查询

  • Future (java.util.concurrent)
    表示异步计算的结果。提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。

  • Callable (java.util.concurrent)
    Callable类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。两者的区别是:Runnable不会反会返回结果,无法抛出经过检查的异常;Callable可以有返回值,返回值可以被Future拿到,能够抛出经过检查的异常。

    /**
     * 异步回调:
     *  Future
     *  Callable<T>
     */
    public class AsynchronousCallback {
    
        public static void main(String[] args) {
            String[] addresss = {"北京市","上海市"};
    
            List<Future<List<UserEntity>>> futureList = new ArrayList<>();
            for (String address: addresss) {
                futureList.add(ThreadPoolExecutorFactory.executor.submit(new TaskCallable(address)));
            }
    
            List<UserEntity> users = new ArrayList<>();
            for (Future<List<UserEntity>> user: futureList) {
                try {
                	//获取future中的返回值
                    List<UserEntity> list = user.get();
                    if (!CollectionUtils.isEmpty(list)){
                        users.addAll(list);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(users);
        }
    }
    
  • 实现Callable, call方法中调用查询数据接口

    class TaskCallable implements Callable<List<UserEntity>> {
    
        private String address;
    
        public TaskCallable(String address) {
            this.address = address;
        }
    
        @Override
        public List<UserEntity> call() throws InterruptedException {
            System.out.println(address);
            UserServiceImpl userService = new UserServiceImpl();
            List<UserEntity> userServiceById = userService.findById(address);
            return userServiceById;
        }
    }
    
  • 返回结果

    北京市
    上海市
    [UserEntity{id=1, username='小红', sex='女', age=18, address='北京市'}, UserEntity{id=2, username='小刚', sex='男', age=18, address='北京市'}, UserEntity{id=3, username='小青', sex='女', age=18, address='北京市'}, UserEntity{id=4, username='小率', sex='男', age=18, address='北京市'}, UserEntity{id=4, username='小率', sex='男', age=18, address='北京市'}, UserEntity{id=6, username='小1', sex='女', age=18, address='上海市'}, UserEntity{id=7, username='小2', sex='男', age=18, address='上海市'}, UserEntity{id=8, username='小3', sex='女', age=18, address='上海市'}, UserEntity{id=9, username='小4', sex='男', age=18, address='上海市'}, UserEntity{id=10, username='小5', sex='男', age=18, address='上海市'}]
    
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值