主线程等待子线程CountDownLatch springboot2.x

防止子线程没执行结束主线程就释放了
1.配置加上

#设置线程池的线程数量
threads.number=4

2.设置一个定长线程池

package cc.datebook.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * springboot启动加载一个线程池
 * @author wongH
 * @date 2018/2/2
 */
@Configuration
public class ThreadPoolConfig {

    @Value("${threads.number}")
    private Integer nThreads;

    @Bean
    public ExecutorService getThreadPool(){
        return Executors.newFixedThreadPool(nThreads);
    }
}

3.api调用

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;

@Autowired
private ExecutorService executorService;

@POSTMapping(value = "/api")
public JsonResult returnDeposit(@RequestBody Map<String, Object> params) {
    if (StringUtils.isEmpty(params.get("token").toString())) {
        return new JsonResult(ResultCode.PARAMS_ERROR, "参数错误");
    }
    String token = params.get("token").toString();
    WebToken webToken = tokenService.getToken(token);
    Integer userId = 0;
    try {
        userId = Integer.valueOf(webToken.getId());
    } catch (Exception e) {
        return new JsonResult(ResultCode.INVALID_AUTHCODE,"当前会话已过期,请重新登录!");
    }

    //添加线程
    CountDownLatch cdl5 = new CountDownLatch(2);
    executorService.execute(new Runnable() {

        @Override
        public void run() {
         do something...
            //完成,计数器减一
            cdl5.countDown();
        }
    });

    executorService.execute(new Runnable() {

        @Override
        public void run() {
         do something...
            //完成,计数器减一
            cdl5.countDown();
        }
    });
    //等子线程执行完
    try {
        cdl5.await();
    } catch (Exception e) {
        logger.error(e.toString());
    }       
    return new JsonResult(ResultCode.SUCCESS,"成功");
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值