在处理大量数据的时候需要多线程处理查询的数据,为了避免死锁和等待。
可以使用分页的方式来查询和更新数据。
// 开启线程数量
//定义固定长度的线程池 防止线程过多
ExecutorService execservice = Executors.newFixedThreadPool(6);
List<Callable<List<Map<String, Object>>>> tasks = new ArrayList<Callable<List<Map<String, Object>>>>();//添加任务
int limit = 139;
int mythread = 2;
for(int i = 0; i <mythread ; i++){
logger.debug("线程:{}",i);
int start = i*limit;
// this是当前类的实例
Callable<List<Map<String, Object>>> qfe = new SaleForceOrderThred(this, start, limit);
tasks.add(qfe);
}
execservice.invokeAll(tasks);
execservice.shutdown(); // 关闭线程池
线程类
public class SaleForceOrderThred implements Callable<List<Map<String, Object>>>{
private BatchService controller;
private int start;//分页index
private int end;//数量
@Override
public List<Map<String, Object>> call() throws Exception {
controller.dopostByLimit(start, end);
return null;
}
public SaleForceOrderThred(BatchService controller,int start,int end) {
this.controller = controller;
this.start = start;
this.end = end;
}
}
可以对处理结果进行返回的。我这边不需要处理的,其实就可以用建扥的Thread。但是要记录处理结果的话 就用这个。