Springbootスレッドプールを使用したサブスレッド戻り値処理
1、@Bean方式でスレッドプールを作成し、コンテナに注入する
2、サービスにスレッドプールを注入する
3、内部クラスの作成(内部クラスを使用しなくてもよい)、サブスレッド呼び出し方法
4、スレッドプールへのタスクの送信
/**
* 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;
}