通常我们的web页面都可以在http默认的时间里返回
但有些时候,我们做批量导入时,后台处理的时间比较长,导致前台在限定时间内没有返回任何数据
当然,这个业务逻辑有很大关系,正常下不该出现这种情况,我且不说这种。
有人说设置ajax的timeout时间,但这个时间是请求超时,不是响应超时。
所以,我们必须在响应时间内完成才可以。
后台使用线程处理:
当所有线程完了之后,返回结果。
代码如下:
ExecutorService executor = Executors.newFixedThreadPool(6);
Iterablepartitions =Iterables.partition(saveStudents, 20);
for (Listlist : partitions) {
StudentImportThread thread = new StudentImportThread(list, loginDomain);
executor.execute(thread);
}
executor.shutdown();
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
解释两点:
shutdown:就表示停止接受任何新的任务且等待已经提交的任务执行完成。
Iterables.partition
这是均分list,每20个一份。工具来自google的guava包
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
是为了等待所有子线程全部执行完毕而设置了,非常大,是为了使用子线程全部执行完。