java http响应超时(timeout),耗时任务的处理方法

通常我们的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);

是为了等待所有子线程全部执行完毕而设置了,非常大,是为了使用子线程全部执行完。

优秀到卓越
分享到:
共 0 条  此列表为空  当前1/1页

© 2014 究问社区 copyRight 豫ICP备13003319号-1