java - 如何监控 future 任务完成的后台任务

标签 java struts executorservice future threadpoolexecutor

大家好,我正在使用 Struts1.1,单击 JSP 中的按钮后,我们需要处理大量数据,其中涉及数据库验证,对于数百万条记录,需要两个多小时。 因此,我们希望使用执行器服务和 java 的 future 任务在后台异步执行。这样,用户可以在后台处理完成时自由移动到其他页面,并且当该过程完成时,用户可以返回同一个 jsp 以单击另一个按钮(处理完成后激活)用于查看数据处理结果: 这是我的 Action 类:

ServletContext servletContext=getServlet().getServletContext();
        ExecutorService poolService = (ExecutorService) servletContext.getAttribute("threadPoolAlias");
        AdminBlocageBackgroundProcessing adminBlocageBackgroundProcessing= new AdminBlocageBackgroundProcessing(fichier,blocage);
        Future<ArrayList> future= poolService.submit(adminBlocageBackgroundProcessing);

这是我的模型类,其中完成了数据库验证:

public class AdminBlocageBackgroundProcessing implements Callable {
private FormFile fichier;
private String blocage;
public ArrayList data=null;
public AdminBlocageBackgroundProcessing(FormFile fichier, String data) {
this.fichier=fichier;
this.blocage=data;
    // TODO Auto-generated constructor stub
}

public Object call( ) {
    // TODO Auto-generated method stub
    try{
    data = ImportMetier.extractFromCSV(
        new String(fichier.getFileData(), 
                   "ISO-8859-1"),blocage);

    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return data;
}

现在我的问题是如何在应用程序级别监视此“调用”方法的执行,以便在其完成时我可以显示数据处理的结果。

最重要的是,我想在后台执行它,以便用户可以在应用程序的其他部分自由移动,这样我就无法使用

data=future.get();

因为这会导致主线程等待,直到调用方法未完成。

提前致谢:-)

最佳答案

为什么无法使用 Future#get() 传递超时或使用 Future#isDone() 检查任务是否已完成?

关于java - 如何监控 future 任务完成的后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18585850/

相关文章:

java - jsp中 session 超时后如何重定向到登录页面?

java - spring-boot 多线程聚合,反之亦然

java - FixedThreadPool 与 CachedThreadPool : the lesser of two evils

java - 执行程序服务的并发数组访问

java - Spring REST - 当资源尚不存在时正确的 PUT 功能

java - 这可以用java中的图像来做吗?

java - JSP - 保存集合

java - 免费GIS服务器获取地理数据

java - 在 Java 中从 GUI 添加数据

jsp - Struts/JSP/SQL 用户或管理员控制 (Tomcat)