Servlet 3.0. ServletRequeststartAsync引入异步,可以将一个请求放入一个异步模型,见下面代码
Servlet 3.1, JSR 340 规范包括异步,除了Servlet 3,1, 并发应用也被导入Java EE 7 的JSR 236,JSR 236提供一个在JavaEE容器中可移植的访问和管理线程池和 ExecutorService的途径:
javax.enterprise.concurrent.ManagedThreadFactorynewThread
ManagedThreadFactory可使用JNDI资源查找获得。
Asynchronous Servlet and Java EE Concurrency Utilities | Java.net举例了说明如下:
@WebServlet(urlPatterns="/test", asyncSupported=true) public class TestAsyncMTFServlet extends HttpServlet { @Resource private ManagedThreadFactory managedThreadFactory;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
final AsyncContext asyncContext = req.startAsync(); final PrintWriter writer = res.getWriter(); Runnable runnable = new Runnable() { @Override public void run() { writer.println("Done"); asyncContext.complete(); } };
Thread thread = managedThreadFactory.newThread(runnable); thread.start(); } }
|
不同于ManagedThreadFactory直接方式,下面两个方式也可以通过JNDI资源查找获得。
javax.enterprise.concurrent.ManagedExecutorServicesubmit, javax.enterprise.concurrent.ManagedScheduledExecutorServiceschedule
@WebServlet(urlPatterns="/test2", asyncSupported=true) public class TestAsyncMESServlet extends HttpServlet { @Resource private ManagedExecutorService managedExecutorService;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
final AsyncContext asyncContext = req.startAsync(); final PrintWriter writer = res.getWriter(); Runnable runnable = new Runnable() { @Override public void run() { writer.println("Done"); asyncContext.complete(); } };
managedExecutorService.submit(runnable); } }
|
Servlet 3.1 和 Java EE 1.0的并发应用Concurrency Utilities 已经在GlassFish 4.0.中可用。
[该贴被banq于2013-06-09 19:24修改过]
[该贴被banq于2013-06-09 19:25修改过]