Springbootスレッドプールを使用したサブスレッド戻り値処理


1、@Bean方式でスレッドプールを作成し、コンテナに注入する
/**
 * FileName: com.XXX.cloud.datas.config
 * Author: XXX
 * Date: 2019/7/4 13:36
 * Description:    
 * History:
 *           

2、サービスにスレッドプールを注入する
@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;
}