Springboot使用线程池,子线程返回值处理

 1、@Bean方式创建线程池并注入容器

/**
 * FileName: com.XXX.cloud.datas.config
 * Author: XXX
 * Date: 2019/7/4 13:36
 * Description: 线程池
 * History:
 *           

2、在service中注入线程池

@Resource(name = "myDataThreadPool")
private ExecutorService threadPool;

3、创建内部类(也可以不使用内部类)以及子线程调用方法

/**
  * 任务1->创建数据库(多线程返回值)
  * @author XXX
  * @date 2019/5/31 16:40
  * @version 1.0
  */
class MyCallable implements Callable {
    private Long appRunDbType;
    private Long companyId;
    private Long userId;
    public MyCallable(Long appRunDbType, Long companyId, Long userId) {
        this.appRunDbType = appRunDbType;
        this.companyId = companyId;
        this.userId = userId;
    }
    @Override
    public Object call() throws Exception {
        return synchrCreateDb(appRunDbType, companyId, userId);
    }
}
/**
  * 同步方法创建库
  * @author XXX
  * @date 2019/6/13 16:24
  * @version 1.0
  */
public String synchrCreateDb(Long appRunDbType, Long companyId, Long userId) {
     XXX...
}

4、 提交任务到线程池

public String createDb(Long appRunDbType,Long userId,Long companyId) {
    // 创建具有返回值的线程任务
    MyCallable myCallable = new MyCallable(appRunDbType, companyId, userId);
    // 执行任务并获取Future对象
    Future future = threadPool.submit(myCallable);
    try {
        // 从Future对象上获取任务的返回值,并返回
        return future.get().toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

 

你可能感兴趣的:(多线程,线程池)