我已经使用.Net异步编程模型通过IHttpAsyncHandler在C#中实现了异步http请求处理。
我是java新手,但希望完成同样的目的 - 开始请求,让它放弃请求处理线程池线程并异步处理,在所有处理完成时发出信号,触发处理程序的结束请求回调并将处理结果写入响应流。
我确信这必须存在,而且我不需要推出自己的解决方案,但是搜索异步http处理只会出现以AJAX为中心的解决方案(我希望在服务器端进行异步处理)。
在java中是否存在IHttpAsyncHandler的模拟?
答案 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