Callable获取返回值

最近在写一个统计任务,恩,也不算最近了,过去一个多月了都。

任务要求,每周日凌晨之前统计用户总数及增长量,因为是分库分表的,统计维度要求到库级别和表级别。

大致实现思路,滚动时,每个表开一个线程做COUNT操作,因为要统计库级别的数据,所以需要等到所有线程结束后拿到所有线程的返回值,进行累加。(至于这里为什么滚动表的时候都要开一个线程,其实不开线程也OK的,但是,这种线程获取返回值的还没有用过嘛,好不容易有个机会,锻炼下)下面说代码了。

  • 返回值的定义:Callable<T>定义时,可以使用自定义的类放在T的位置,类里面封装需要的属性;
  • 返回值的接收:Future<T>,接收返回值就是用Future了,T就是定义的返回类了,和Callable中的T是同一个;
  • 逻辑处理:重写call()方法,做自己的业务逻辑(这里遇到一个坑写在最后),return返回值;
  • 返回参数的提交:一般是配合线程池来使用,定义一个线程池,submit()调用Callable的call方法,返回结果是Future对象,即便线程还没有结束,对象会先生成;
  • 返回值的获取:用到的时候直接用接收参数的Future 对象.get()就ok了

说了挺多,怪啰嗦的,其实代码就是下面这样了:

 结束的最后,说下自己掉进去的那个坑。

具体执行业务逻辑的时候从上面截图可以看到,是可以传参数过去的,我传了一个service过去,一直报空指针,直接在定义Callable的类中注入,也住不进去,这才有了上面这种写法,绕开了那个问题。就酱紫,恩、

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值