在我的Java Web应用程序中,我有一个结束大约200封电子邮件的方法。由于电子邮件服务器延迟,整个过程大约需要7分钟。此批量电子邮件发送必须发生在用户操作的结果中。我当然不希望用户在转发到下一个版本之前必须等待很长时间,而不是说Apache无论如何都不会超时,所以我试图实现FutureTask来让进程在单独的线程中运行,同时继续其余代码如下:使用FutureTask进行异步程序时遇到问题
Some code;
Runnable r = (Runnable)new sendEmails(ids);
FutureTask task = new FutureTask(r, null);
Thread t = new Thread(task);
t.start();
Some more code;
但是,该应用程序仍在等待FutureTask完成,然后再继续。我接受这样的想法,即在继续执行脚本的其余部分的同时,这也不是在另一个线程中运行一些代码的最佳方式。有更好的方法/我如何使这个工作?
这应该不会被阻止,除非您在'More some code'块中某个地方调用'get'任务。 – yakshaver 2013-03-01 18:14:11
线程完成工作后,您是否想要执行一些操作? “你的意思是什么?”然而,应用程序仍然等待FutureTask在继续之前完成?您的代码中没有阻止呼叫。 – 2013-03-01 18:14:48
我不打电话过去,我不需要退货。意思是说,当我调用这段代码时,“更多的代码”(只是将用户转到页面的调用)在Runnable完成之前不会执行。 – sgd 2013-03-01 18:49:00