mockDao模拟使用dao调用数据库,而且sql有点慢的情况下,假定需要调用三十次,只要数据库能抗住,应该可以这样提速。
package com.example.demo;
import lombok.SneakyThrows;
import org.apache.hadoop.yarn.webapp.view.HtmlPage;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.BufferedInputStream;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
//@SpringBootTest
class DemoApplicationTests {
// 创建缓存线程池
ExecutorService service = Executors.newCachedThreadPool();
@SneakyThrows
@Test
public void init() {
List<Map<String,Object>> list=new ArrayList<>();
List<Future<Map<String, Object>>> threadList=new ArrayList<>();
for (int i = 0; i < 30; i++) {
Future<Map<String, Object>> submit = service.submit(new MyCallable(i) {
@Override
public Map<String, Object> call(){
Map<String, Object> map = mockDao(this.index);
return map;
}
});
threadList.add(submit);
}
//获取返回值,当执行完成后会
for (Future<Map<String, Object>> mapFuture : threadList) {
Map<String, Object> map = mapFuture.get();
list.add(map);
}
System.out.println(list);
}
@SneakyThrows
public Map<String, Object> mockDao(int i) {
Map<String, Object> map = new HashMap<>();
//模拟查询结果
map.put("day", i);
map.put("data", i + "data");
int i1 = 1000 + new Random().nextInt(2000);
// 模拟慢sql延迟
Thread.sleep(i1);
map.put("sleep",i1);
return map;
}
}
abstract class MyCallable implements Callable<Map<String,Object>> {
// 该类的作用是在成员变量中保存dao将要用到的参数,通过构造方法构造后可以调用dao,并且在调用时候传入
int index;
public MyCallable(int i){
this.index=i;
}
}