在进行,处理大批量数据,程序执行缓慢,这时候就可以使用多个线程, 同时对数据处理,此文章只作为借鉴,如有不足之处欢迎指出.废话不多说,上代码↓
//构建线程池设置线程池的最大数量,线程池最大存活数量,线程池最大空闲时间,时间单位,线程等待队列,线程创建工厂
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 200, TimeUnit.SECONDS, new ArrayBlockingQueue<java.lang.Runnable>(2), new ThreadPoolExecutor.DiscardOldestPolicy());
Justice justice = ApplicationContext.getBean(Justice.class);
//获取所操作的数据list集合
List<Entity> list = entityManager.list(condition);
//获取当前要操作的数据总数量
int lenth = list.size();
//设置线程数量手
int threadNumber = 10;
//分配每个线程执行的数量
int listSize = lenth / threadNumber;
List<Entity> subList = null;
for (int i = 0; i < threadNumber; i++) {
//如果是最后一个线程,截取当前的执行的数量,到总数据的末尾
if (i == threadNumber - 1) {
subList = list.subList(i * listSize, lenth);
} else {
//否则默认按照每个大小的执行
subList = list.subList(i * listSize, (i + 1) * listSize);
}
//线程池执行text的run方法
threadPoolExecutor.execute(new text(subList, justice));
}
public class text implements java.lang.Runnable {
List<Entity> list;
Justice justice;
text(List<Entity> list, JusticeBureauFilter justiceBureauFilterOne) {
this.list = list;
this.justiceBureauFilterOne = justiceBureauFilterOne;
}
public void carried() {
for (Entity entity : list) {
dataDown(entity.getId(), entity.getTypeId(), this.justiceBureauFilterOne);
}
}
@Override
public void run() {
carried();
}
}