private static void saveObjMulThread(int s, String saveEntityStr) throws Exception {
List<Object> saveEntityList = new ArrayList<Object>();
for (int i = 0; i < s; i++) {
Object saveEntity = Class.forName(saveEntityStr).newInstance();
//省略赋值操作
saveEntityList.add(saveEntity);
}
//每500条数据开启一个线程
int threadSize =500;
List<List<Object>> pList = ListUtils.partition(saveEntityList, threadSize);
//总数据条数
// int dataSize = saveEntityList.size();
//线程数
int threadNum=pList.size();
//创建线程池,--拥有固定线程数量的线程池(推荐)
ExecutorService exc = Executors.newFixedThreadPool(threadNum);
//定义可以提交给线程池的任务集合
List<Callable<List<String>>> tasks = new ArrayList<>();
//每个线程的任务
Callable<List<String>> task = null;
//定义切割总List集合后的集合
List<Object> cutList = null;
//遍历任务
for (List<Object> paramList : pList) {
task = new Callable<List<String>>() {
@Override
public List<String> call() throws Exception {
//定义接收业务返回值的集合
List<String> newList = new ArrayList<>();
//Session s = SessionUtil.getSession("sessionFactory");
SessionFactory sf = (SessionFactory) SpringContextHolder.getBean("sessionFactory");
Session s = sf.openSession();
s.getTransaction();
if (!s.getTransaction().isActive()) {
//开启事务
s.beginTransaction();
}
//处理自己的业务,这里挑选基数
for (Object a : paramList) {
s.save(a);
}
s.getTransaction().commit();
s.close();
return newList;
}
};
//添加任务
tasks.add(task);
}
List<String> fanList =new ArrayList<>();
try {
//执行所有任务并获取结果,捕获异常InterruptedException
List<Future<List<String>>> results = exc.invokeAll(tasks);
for (Future<List<String>> result : results){
//调用get方法获取每个返回的结果,将结果添加到定义好的集合中。捕获异常ExecutionException
fanList.addAll( result.get());
}
}catch (Exception e){
e.printStackTrace();
}
//关闭线程池
exc.shutdown();
}