防止子线程没执行结束主线程就释放了
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,"成功");
}