1.ThreadPoolConfig
/**
* @Description: 数据收集配置,主要作用在于Spring启动时自动加载一个ExecutorService对象
* @Auther: sp
* @Date: 2020/11/24 11:36
*/
@Configuration
public class ThreadPoolConfig {
@Bean
public ExecutorService getThreadPool(){
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build();
ExecutorService taskExe = new ThreadPoolExecutor(1, 5, 200L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
return taskExe;
}
}
2.使用
@Resource
private ExecutorService executorService;
······
// 开一个线程 去处理异步任务
executorService.execute(() -> {
try {
//初次查询时,线程放在同步查询之后
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
//查询数据
cacheValue.set(getTokenApi());
//日期设缓存时间的2倍,用于脏读
appletTokenCache.put(APP_TOKEN_CACHE_KEY, cacheValue.get(), cacheTime * 2);
});