Java利用多线程执行SQL减少执行时间提高效率

Java学习 专栏收录该内容
4 篇文章 0 订阅

首先这是个人在实际的项目中使用的代码,部分敏感代码没有上,不过不影响对代码的理解:

1.实现自己的线程

/**
 * @author 
 * TODO:收款率线程
 */
public class Thread2CollectionRate implements Runnable{

  private String sql;

  private List<Map<String, Object>> listMap ;

  @Override
  public void run() {
  //此处线程中获取DAO实例是通过spring注入,各位可以根据自己的方式注入
  BaseService service = (BaseService)SpringContextUtil.getService("service");
  List<Map<String, Object>> list = service.getList(sql);

  System.out.println("run tread ok ..................................."  + list.size());
  //添加数据到MAP中去
  if(listMap != null) {
  listMap.addAll(list);
}

}

public String getSql() {
 return sql;
}

public void setSql(String sql) {
 this.sql = sql;
}

/**
* @return the listMap
*/
public List<Map<String, Object>> getListMap() {
return listMap;
}




/**
* @param listMap the listMap to set
*/
public void setListMap(List<Map<String, Object>> listMap) {
this.listMap = listMap;
}



}


2.循环调用线程

String sql = "你的SQL语句";



//定义线程池
ExecutorService e = Executors.newCachedThreadPool();


List<Map<String, Object>> listMap = new LinkedList<Map<String, Object>>();

for(int i = 0 ; i < 6; i++) {
  String tempSql = "需要分线程执行的SQL语句";
  Thread2CollectionRate tempTread = new Thread2CollectionRate();
  //把需要装数据的Map放到线程中去
  tempTread.setListMap(listMap);
  //把需要执行的SQL放到线程中去
  tempTread.setSql(tempSQL);
  //执行线程
  e.execute(tempTread);

}

//通知关闭线程池
e.shutdown();
//死循环等待线程池完全关闭,只有所有的线程全部执行完毕e.isTerminated()等于true


try {
while(true) {
  if(e.isTerminated()) {
  //listMap中就是你所需要的全部数据
  System.out.println("listMap.size() :" + listMap.size());
  break;
 }
//每次循环等待250毫秒
Thread.sleep(250);
}
} catch (InterruptedException e1) {
e1.printStackTrace();
}



}



  • 1
    点赞
  • 5
    评论
  • 10
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值