spring中使用线程池启动多线程执行任务

线程池 ThreadPoolTaskExecutor

spring内置了ThreadPoolTaskExecutor线程池,可以直接初始化后声明为bean,在上下文的任意位置进行依赖注入。

线程实例的方法 execute/submit

如果你的线程不需要返回值,可以调用ThreadPoolTaskExecutor bean实例的execute方法,
如果需要返回值,可以调用submit方法。

示例

假设ThreadPoolTaskExecutor 的bean名称为 pool,则一个简单的线程执行实例为:
Future future=pool.submit(()=>doMyJob() );
有了lamda表达式,就是这么简单,其实lamda表达式中是创建了一个 Callable接口的匿名内部类。并且执行了在线程外面声明的doMyJob()方法。就是这么简单…

			 //异步方式查询
            try {
                Future<Map<String, Object>> bInfoFuture = threadPoolTaskExecutor.submit(() -> getCaseInfoByCaseids(caseids));
                Future<Map<String, Object>> bInfothFuture = threadPoolTaskExecutor.submit(() -> getCaseInfothByCaseids(caseids));
                Future<Map<String, Object>> bInspectionFuture = threadPoolTaskExecutor.submit(() -> getCaseInspectionByCaseids(caseids));
                Future<Map<String, Object>> bCheckFuture = threadPoolTaskExecutor.submit(() -> getCaseCheckByCaseids(caseids));
                Future<Map<String, Object>> bWpFuture = threadPoolTaskExecutor.submit(() -> getCaseWpByCaseids(caseids));
                Future<Map<String, Object>> bAttachFuture =null;
                if (mode == null || mode.indexOf("attach") < 0) {
                    bAttachFuture = threadPoolTaskExecutor.submit(() -> getCaseAttachByCaseids(caseids));
                }
                bInfo = bInfoFuture.get();
                bInfoth=bInfothFuture.get();
                bInspection=bInspectionFuture.get();
                bCheck=bCheckFuture.get();
                bWp=bWpFuture.get();
                if (mode == null || mode.indexOf("attach") < 0) {
                    if(bAttachFuture!=null){
                        bAttach=bAttachFuture.get();
                    }
                }

            }catch(InterruptedException e){
                throw e;

            }catch (ExecutionException e){
                throw e;
            }
获取异步返回结果

当然,使用了submit方法,也就意味着需要得到线程的返回结果,上面返回的future对象中即可取得结果。
调用future.get()方法会阻塞当前线程,直到相应线程执行完毕返回类型为T的结果。达到同步效果。

参考

https://blog.csdn.net/qq_15037231/article/details/80613764

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值