java类似于C#APM / IHttpAsyncHandler

时间:2011-02-16 15:45:28

标签: java asynchronous httphandler

我已经使用.Net异步编程模型通过IHttpAsyncHandler在C#中实现了异步http请求处理。

我是java新手,但希望完成同样的目的 - 开始请求,让它放弃请求处理线程池线程并异步处理,在所有处理完成时发出信号,触发处理程序的结束请求回调并将处理结果写入响应流。

我确信这必须存在,而且我不需要推出自己的解决方案,但是搜索异步http处理只会出现以AJAX为中心的解决方案(我希望在服务器端进行异步处理)。

在java中是否存在IHttpAsyncHandler的模拟?

2 个答案:

答案 0 :(得分:1)

Java Servlet 3.0增加了类似于ASP.NET的异步支持。

http://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3

支持在较新版本的servlet容器中可用,例如Tomcat 7.0。

答案 1 :(得分:0)

在Java Servlets中,每个请求都有自己的线程,并不限制其他请求的处理。所以,原则上它们已经是异步的:http://www.codestyle.org/java/servlets/faq-Threads.shtml

<。> .Net中的AFAIK,IHttpAsyncHandler应该是更高性能的,但不是每个人都同意:http://geekswithblogs.net/SanjayU/archive/2009/01/06/ihttphandler-vs-ihttpasynchandler.aspx

更新:

要启动多个并行任务并等待所有这些任务完成,最好使用ExecutorService。您可以在Servlet方法中执行类似的操作:

    ExecutorService executor = Executors.newCachedThreadPool(numThreads);
    for (int i = 0; i < numParallelTasks; i++) {
        Runnable worker = new MyRunnable();
        executor.execute(worker);
    }
    // This will make the executor accept no new threads
    // and finish all existing threads in the queue
    executor.shutdown();
    // Wait until all threads are finish
    while (!executor.isTerminated()) {

    }
    // all tasks done