1、 LinkedBlockingQueue队列将请求存放起来
2、ScheduledExecutorService定时任务调度,每隔一段时间执行任务处理队列里的请求
3、 CompletableFuture完成线程任务,返回结果
@Service
public class QueryService {
//定义一个内部类,用来封装请求的数据
class RequestData {
String code;
CompletableFuture<Map<String,Object>> future;
}
//用来存放请求的队列
LinkedBlockingQueue<RequestData> queue = new LinkedBlockingQueue();
@Autowired
private QueryTool queryTool;//里面模拟了单次查询和批量查询
@PostConstruct
public void init() {
//定时任务,10ms去操作队列
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleAtFixedRate(() -> {
int size = queue.size();
if (size == 0) {
return;
}
List<RequestData> requestDatas=new ArrayList<>()