首页 > 学院 > 开发设计 > 正文

ThreadPoolTaskExecutor异步线程池

2019-11-10 18:33:51
字体:
来源:转载
供稿:网友

一、在sPRing配置文件中配置

<!-- 异步线程池 --> <bean id="threadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心线程数 --> <property name="corePoolSize" value="3" /> <!-- 最大线程数 --> <property name="maxPoolSize" value="20" /> <!-- 队列最大长度 >=mainExecutor.maxSize --> <property name="queueCapacity" value="1000" /> <!-- 线程池维护线程所允许的空闲时间 --> <property name="keepAliveSeconds" value="300" /> <!-- 线程池对拒绝任务(无线程可用)的处理策略 --> <property name="rejectedExecutionHandler"> <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /> </property> </bean>

二、在service类中注入 @Autowired private ThreadPoolTaskExecutor threadPool;

三、service方法中使用

public void doSomething(){ threadPool.execute(new Runnable() { @Override public void run() { //异步执行耗时的业务任务 } });}

完成


备注:如果要想得到耗时任务的返回结果可以如下使用:

String resp="";Future<String> task = threadPool.submit(new Callable<String>(){ @Override public String call() throws Exception { String callbackResp = HttpUtils.post(Url, params, "utf-8"); return callbackResp; } }); try { //注意task.get()会阻塞,直到返回数据为止,所以一般这样用法很少用 resp=task.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表