处理思路:(1)比如查出100万数据(2):创建10个线程,循环处理这些数据,每一次处理调用一个线程,如果某一个线程被占用了,那么就调用另外一个线程,以此类推,这样就不需要等待上一个线程的完毕,从而加快处理的速度。
//需要引用的线程类:这个是jdk1.8自带的线程处理jia包
import java.util.concurrent.ExecutorService;
@Controller
@RequestMapping("/hznzw")
public class HznzwProductAction {
@RequestMapping("/product/initProductDetail.html")
public String initProductDetail(@RequestParam(value="s1",required=true)Integer s1,
@RequestParam(value="s2",required=true)Integer s2){
Map<String, Object> map = new HashMap<String, Object>();
map.put("start", s1);
map.put("end", s2);
//根据数据里表里面的id查询出需要处理的数据
List<HznzwProduct> hznzwProducts = hznzwProductService.queryProductList(map);
//创建10个线程
ExecutorService executor = Executors.newFixedThreadPool(10);
//调用线程处理数据
for (HznzwProduct hznzwProduct : hznzwProducts) {
executor.execute(new ToServer(hznzwProduct .getHznzwProId().toString(),product));
}
//关闭线程池
executor.shutdown();
return "";
}
public class ToServer implements Runnable{
private String proId;
private MallProduct product;
public ToServer(String proId,MallProduct product) {
this.proId = proId;
this.product = product;
}
@Override
public void run() {
getHznzwProduct(proId,product);
}
}
private void getHznzwProduct(String proId,MallProduct product){
//业务处理
//比如插入或者修改数据。。
ProductGet gg = null;
try {
gg = getHznzwState(proId,URL);
if(gg.getData() != null && gg.getData().getProductDtc() != null){
product.setDtc7dayHours(gg.getData().getProductDtc().getDTC7Day_Hours());
product.setDtc15dayHours(gg.getData().getProductDtc().getDTC15Day_Hours());
}else{
product.setDtc7dayHours(1000);
product.setDtc15dayHours(1000);
}
product.setUpdateTime(new Date());
//修改子表与主表价格
mallProductService.updateByPrimaryKeySelective(product);
} catch (Exception e) {
e.printStackTrace();
}
}
}