业务类代码
import java.util.concurrent.CompletableFuture;
/**
* 在获取列表数据的同时,异步处理数据状态,下次刷新列表后状态显示正确,不影响表格返回速度
*/
public ResultData<List<Data>> listByUserId() {
//查询数据库或缓存中的数据列表
List<Data> dataList = mapper.listByUserId();
//线程池异步处理,dataList为数据库或缓存中取出来的数据
//service:处理业务需要注入的实现类,本类写 this
CompletableFuture.runAsync(new DataListRunable(dataList,service), TestThreadPool.getPool());
//正常返回
return ResultData.success(dataList);
}
实现Runable接口的实现类
@Slf4j
public class DataListRunable implements Runnable{
private final Service service;
private final List<Data> dataList;
public DataListRunable (List<Data> dataList,Service service){
this.dataList = dataList;
this.Service = service;
}
//重写run方法
@Override
public void run() {
//处理业务
}
}
定义线程池代码
public class TestThreadPool{
private static final AtomicInteger COUNT = new AtomicInteger(1);
/**
* 初始化参数,顺序对应
* corePoolSize:核心线程池大小
* maximumPoolSize:最大线程池大小
* keepAliveTime:线程最大空闲时间
* unit:时间单位
* workQueue:线程等待队列
* threadFactory:线程创建工厂
* handler:拒绝策略
*/
private static final ExecutorService POOL = new ThreadPoolExecutor(2, 2,
60, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(10), r -> new Thread(r, "testList-thread-" + COUNT.getAndIncrement()),
new ThreadPoolExecutor.CallerRunsPolicy());
public static ExecutorService getPool() {
return POOL;
}
}